JavaScript 变量范围不期望结果
JavaScript variable scoping not expecting result
第二个控制台上的bar
发生了什么.log?不应该是"安迪"或抛出引用错误吗?另外,为什么foo
不是未定义的?
使用铬。
// lexical scope example
var bar = "Andy";
try {
console.log(bar); // Andy
(function() {
console.log(bar); // undefined!
var bar = "B",
foo = "Last Name";
console.log(bar); // B
console.log(foo); // Last Name
})();
console.log(bar); // B
console.log(foo); // Reference Error
} catch (e) {
console.log(e);
}
上面的JSFiddle:http://jsfiddle.net/2D9fj/3/
var 声明被提升,解析后你的代码看起来像,(这就是为什么许多开发人员在顶部定义他们的变量)
// lexical scope example
var bar = "Andy";
try {
console.log(bar); // Andy
(function() {
var bar, foo;
console.log(bar); // undefined!
bar = "B";
foo = "Last Name";
console.log(bar); // B
console.log(foo); // Last Name
})();
console.log(bar); // B
console.log(foo); // Reference Error
} catch (e) {
console.log(e);
}
以 (function() {
开头的行创建一个范围/闭包,该范围/闭包包含栏,其值在范围/闭包之外无效的 foo var
Andrew 的回答是正确的,但我认为提供一个仅说明吊装概念的示例而没有额外的代码会很有用。
// this:
function foo() {
console.log(x);
var x = 1;
}
//is actually interpreted like this:
function foo() {
var x;
console.log(x);// undefined
x = 1;
}
此外,关闭与此问题有关,但仅限于它使识别吊装错误变得更加困难。
(function parent() {
// x declared and assigned in parent scope
var x = 2;
function foo() {
console.log(x); // 2 (closed around parent scope)
}
function bar() {
console.log(x); // undefined (bar scope, x declaration is hoisted, but not defined yet)
var x = 1;
}
function baz() {
var x = 3;
console.log(x); // 3 (baz scope, defined)
}
//run
foo();
bar();
baz();
}());
相关文章:
- 奇怪的Javascript结果
- Javascript(jQuery)给了我奇怪的结果
- JSONP请求返回结果,但也触发error_callback
- 如何在chrome扩展中存储数据/结果,以及如何使用setTimeout使其只被调用一次
- Javascript,输出结果后页面不断刷新
- 这是使用html快照和谷歌获取的预期结果吗?SEO/SPA
- 将地理编码结果转换为php变量以发布到mysql数据库
- AngularJS/HTML/Bootstrap元素用于动态搜索结果
- JavaScript 变量范围不期望结果
- 茉莉花期望不匹配数组结果
- 循环访问 JSON 对象,没有得到我期望的结果
- 802.11 auth"没有得到我所期望的结果
- 我的函数没有产生期望的结果
- JavaScript表单验证代码没有给出期望的结果
- Ng-if和ng-class-even/odd不能很好地一起工作,也不能得到期望的结果
- 包含数组方法的JavaScript函数没有返回期望的结果
- Rails控制器和javascript:不要给出期望的重定向结果
- 图像旋转木马是波动的&没有给出期望的结果
- 没有得到我期望的结果
- while循环-如何将userInput转换为一个数字,并使用该数字创建一个期望的结果与javascript