Created
March 4, 2015 03:18
-
-
Save ruanyf/cae49b92b0bd43c4d57d to your computer and use it in GitHub Desktop.
JavaScript作用域
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
function a(x,y){ | |
y = function() { x = 2; }; | |
return function(){ | |
var x = 3; | |
y(); | |
console.log(x); | |
}.apply(this, arguments); | |
} | |
a(); |
函数的作用域嵌套关系在定义的时候就已经明确下来了,而不是在执行的时候才确定
function foo() {
console.log( a ); // 2
}
function bar() {
var a = 3;
foo();
}
var a = 2;
bar(); //2
作用域的变量定义来自函数参数,var 定义,函数申明,否则继承自上层作用域。
以后 es6 增加 arrow function,block scope 和 default options 会更复杂
https://gist.github.com/zry656565/a420989bfa8cb832addd 加了句代码,也许能帮助你理解。
是3啊。不是很符合直觉吗?
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
说白了就是 js 是静态作用域的。。不管怎么整最后输出的都是匿名函数里面 x 的值呗