javascript中变量相关的若干问题
2017-11-03 21:01
316 查看
JS中若干问题及解答
前言
本文涉及到的全部代码在Nodejs v6.9.5和Chrome v 61.0.3163.100中进行过验证目录
前言目录
作用域
变量提升
对象属性和变量
对象和函数
this的问题
作用域
语法作用域(或者说语法作用域)和动态作用域,JS基本上是语法作用域。语法作用域顾名思义是基于语法的。语法作用域在编译阶段就确定了变量的作用范围,而动态作用域是在执行的时候才能确定变量的值。语法作用域是基于代码中的作用域嵌套来一层层的确定变量的值的,和变量在代码中的定义位置有关。而动态作用域则是在程序的执行到变量的时候才去寻找变量的值,即是动态作用域中,变量的值与调用的函数相关,是基于程序的调用栈来确定的,(和JS中的this有些类似)。但JS基本上是语法作用域的(eval()和with除外)。function foo(){ console.log(a); } function bar(){ var a = 3; foo(); } var a = 2; bar(); //此时如果是动态作用域输出 3 //而JS是语法作用域,所以输出 2
变量提升
重复定义
对象属性和变量
var name = "var" //var name var obj = { name:"obj_attr",//obj{name} get_name(){ console.log(name); //var console.log(obj.name); //obj_attr } }
上面代码中出现了两个
name,
var name和
obj{name},其中前者name是变量名,后者是obj对象的属性名,前者可以通过变量名直接访问,而后者只是对象的一个属性名,必须通过对象访问。故上文中通过name直接访问到的是作为变量的
var name,而想访问
obj{name}只能通过
obj.name。
对象和函数
JS里最初都是function,
object也是从
function衍生出来的。
{}是Object,同时也是Function。
声明一个对象有几种方式
函数
函数也是变量。变量名是一个标记。是对变量操作的钥匙。指针,应用,句柄都可以表达类似的意思。函数名同时也是函数变量的变量名。函数名可以理解为一个指向函数实现的入口,对外代表整个函数。可以用var foo1 = function(){...},以及
function foo2(){...},来定义foo函数,foo1和foo2指向相同的函数。(注意:这两种生成函数变量的操作不同,前者是赋值后者是声明,编译阶段对他们的处理不同)JS中的函数变量是高级函数advance function,可以进行变量的操作,比如赋值,组成数组,作为属性的值,作为函数的参数。
相关文章推荐
- JavaScript调用传递变量参数的相关问题及解决办法
- JavaScript调用传递变量参数的相关问题及解决办法
- 指针相关问题若干
- Javascript作用域问题的构造函数的变量
- C/C++函数返回局部变量相关问题
- javascript 的变量、作用域和内存问题
- Dojo class中跟变量相关的几个问题
- 关于java的JDK环境变量设置方法及相关问题解决方案
- 使用javascript开发windows phone应用的相关问题
- 关于帝国标签变量带入javascript中出现的问题
- 当javascript中属性为变量时发生的问题
- HOWTO - InstallAnywhere的变量中如何处理$字符的相关问题
- 一个引用相关问题,延长临时变量的生命周期
- javascript高级程序设计第四章:变量、作用域和内存问题读书笔记
- 轻松理解javascript中的局部变量与全局变量以及this的问题
- Javascript的变量和作用域问题(二)之作用域
- js的变量相关的问题
- 【JavaScript基础】在写冒泡排序时遇到的JavaScript基础问题:JavaScript的数据类型和变量赋值时的原理
- ??javascript里的变量问题