js变量提升
2019-07-29 本文已影响0人
Aniugel
1、如果一个声明的变量在函数体内,那他们的作用域就是函数的内部,如果在去全局作用域下声明,那他的作用域就是全局的。通过var 声明发的变量是无法用delete删除的。
/ num1为全局变量,num2为window的一个属性
var num1 = 1;
num2 = 2;
// delete num1; 无法删除
// delete num2; 删除
function model(){
var num1 = 1; // 本地变量
num2 = 2; // window的属性
// 匿名函数
(function(){
var num = 1; // 本地变量
num1 = 2; // 继承作用域(闭包)
num3 = 3; // window的属性
}())
}
var a = 9;
function demo() {
console.log(a)
}
console.log('a' in window)//true
console.log(window['a'])//9
console.log(window.a)//9
window.demo()//9
2、函数内部的声明的变量会被提升到函数的头部,函数在执行解析的时候,先进行变量声明处理,然后在运行函数内部的代码
if(!('a' in window)){
var a=1;//在解析时先声明var a 在window中 为true
image.png
image.png
3、变量和赋值语句一起书写,在js引擎解析时,会将其拆成声明和赋值语句2部分,声明置顶,赋值保留在原来的位置
var a=1;//拆解成如下
var a;
console.log(a)//undefined
a=1;
4、变量重复声明不会报错,后面的会覆盖前面的
image.png