为什么外部作用域变量不能正确地绑定到内部变量?
Why doesn't the outer scope variable get properly bound to the inner variable?
(function(){
var x = 23;
return function(){
var x = x;
return x;
}
}())();
为什么返回undefined而不是23?
var x = x;部分是足够明确的,因为右边隐含地指的是外部作用域中的x ?
语句var x = x;
在外部作用域中看不到变量x
。作用域中的变量x
在赋值前就已经存在了,并且在外部作用域中遮蔽了该变量。
范围内的所有变量都是在范围内的代码执行之前创建的(提升),所以它就像你有:
(function(){
var x;
x = 23;
return function(){
var x;
x = x;
return x;
}
}())();
实际上,在作用域中声明变量并不重要。您可以在代码的最后声明它们(尽管这会有点令人困惑),并且代码仍然是相同的:
(function(){
x = 23;
return function(){
x = x;
return x;
var x;
}
var x;
}())();
var x = x;部分是足够明确的,因为右边隐含地指的是外部作用域中的x ?
。在执行任何赋值之前,所有变量的作用域都是确定的。
有一个概念叫做可变提升。简而言之,在执行函数之前,所有在函数内部声明的变量都将被标记为未定义。所以它返回undefined。由于变量提升,您可以稍后定义变量,但可以在…如。function(){alert(x);var x;}
将警告未定义,但当function(){alert(x);}
抛出错误…
给定:
(function(){
var x = 23;
return function(){
var x = x;
return x;
}
}())();
内部函数只看到内部x。
当进入执行上下文时,所有声明的变量都被初始化,给定值undefined,并在执行任何代码(例如赋值)之前放置在某种变量对象上。所有外部变量都放在作用域链中。
解析标识符时,首先检查变量对象,只有在没有找到时才检查作用域链。
相关文章:
- 如何从函数内部的这个变量中获取值
- 匿名自执行js函数内部的全局变量在外部仍然可用
- Chrome扩展:是否有一种方法可以运行JavaScript来获取页面上的内部html,并将其保存到扩展中的变量中
- 在Javascript中的变量内部使用while()语句
- 变量内部的引号
- 循环和局部变量内部的闭包
- 展开变量内部的标记
- 从构造函数变量内部调用函数,在 JavaScript 中给出 Undefiend 错误
- 为什么没有识别全局变量(内部函数)
- Javascript变量内部数组
- Angularjs $scope变量内部的jquery绑定方法
- 转换& # 39;和“;要在变量内部使用的字符串内部.(Javascript)
- 不能复制变量内部的内容
- 调用变量内部的函数
- 从变量内部的函数访问javascript变量
- 使用Javascript为变量内部的值添加单字符串引号
- JQuery变量内部按钮函数
- 访问变量内部的DOM元素
- 我如何调用$scope变量内部函数在Ionic不同的模板
- JS如何获得一个目标变量内部的变量名