ecmascript非常简单
var
. 如果你不使用
var
在函数内部声明分配给全局范围的变量。这是因为链范围界定的工作方式。执行环境在本地作用域中查找标识符,然后向上移动,直到到达全局作用域。如果没有找到标识符的声明,并且没有将其标识为参数,则在全局范围内创建变量。
例如,本地范围:
var car = 'Blue';
function change_color () {
var car = 'Red';
}
change_color();
console.log(car); //logs 'Blue' as car is in the local scope of the function.
什么时候?
car
在本地作用域中找不到:
var car = 'Blue';
function change_color () {
car = 'Red';
}
change_color();
console.log(car);
//logs 'Red' as car is not in the local scope and the global variable is used.
显然,这条规则有一个例外我不知道也不理解(
注意函数名
):
var car = 'Blue';
(function car () {
car = 'Red';
})();
console.log(car); //Logs 'Blue'????
有人能解释一下吗?我不知道这在Ecmaspec中的解释。在Chrome8和火狐3.6中测试