1.函数作用域:在函数内声明的所有变量在函数体内始终是可见的。这意味着在变量声明之前甚至已经可用。
*“声明提前”:javascript函数里声明的所有变量(但不涉及赋值)都被提前至函数的顶部。
function test(o) {
var i = 0;
if(typeof(o) == "object") {
var j = 0;
for(var k=0; k<10; k++) {
console.log(k);//0-9
}
console.log(k);//10
}
console.log(j);//0
}
var scope="global";
function() {
console.log(scope);//undefined
var scope = "local";
console.log(scope);//"local"
}
因为函数内变量scope的声明被提前,相当于:
var scope = "global";
function(){
var scope;
console.log(scope);
scope = "local";
console.log(scope);
}
2.当使用var声明一个全局变量的时候,实际上定义了一个全局对象的属性,这个变量无法通过delete删除(该变量不可配置)。给一个未声明的变量赋值,javascript会自动创建一个全局变量,且该变量可配置(可删除)。
var truevar = 1;//声明一个不可删除的全局变量
fakevar = 2;//创建全局对象一个可删除的属性
this.fakevar2 = 3;//同fakevar
delete truevar;//false
delete fakevar;//true
delete fakevar2;//true
3.
javascript权威指南笔记--javascript语言核心(二)
原文:http://www.cnblogs.com/rellame/p/4953913.html