js变量声明提升

1.变量的定义

可以使用var定义变量,变量如果没有赋值,那变量的初始值为undefined

2.变量作用域

变量作用域指变量起作用的范围。变量分为全局变量和局部变量。全局变量在全局都拥有定义;而局部变量只能在函数内有效。

在函数体内,同名的局部变量或者参数的优先级会高于全局变量。也就是说,如果函数内存在和全局变量同名的局部变量或者参数,那么全局变量将会被局部变量覆盖。

所有不使用 var定义的变量都视为全局变量

3.函数作用域和声明该提前

js的函数作用是指在函数声明的所有变量在函数体内始终有定义的,也就是说变量在声明之前已经可用,所有这特性成为声明提前,即js函数里的声明(只是声明,但不涉及赋值)都被提前到函数体的顶部,而变量赋值操作留在原来的位置。

声明提前是在JavaScript引擎的预编译时进行,是在代码开始运行之前。

例子:

varscope ='global';

functionf(){

console.log(scope);

varscope ='local';

console.log(scope);

}

由于函数内声明提升,所以上面的代码实际上是这样的

varscope ='global';

functionf(){

varscope;//变量声明提升到函数顶部

console.log(scope);

scope ='local';//变量初始化依然保留在原来的位置

console.log(scope);

}

经过这样变形之后,答案就就非常明显了。由于scope在第一个console.log(scope)语句之前就已经定义了,但是并没有赋值,因此此时scope的指是undefined.第二个console.log(scope)语句之前,scope已经完成赋值为’local’,所以输出的结果是local。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容