“这是我参加11月更新挑战的第5天,详情请查看:2021最后更新挑战”
关于JavaScript中变量和函数声明的改进javascript 函数 变量,笔试时可能会被问到,概率比较高。 这里分享一下我对JavaScript中变量和函数声明的提升的理解
什么是变量作用域
变量生命周期:JavaScript变量的生命周期非常简单。 从声明开始,局部变量会在函数运行后被删除,全局变量会在页面关闭后被删除。
局部变量:JavaScript函数内部声明的变量是局部变量,只能在函数内部访问,并且同名的局部变量可以在不同的函数中使用。
全局变量:存在于函数外部的变量是全局变量,网页上的所有脚本和函数都可以访问它
我们用代码来理解一下:
变量范围
我们用代码来理解一下
//demo();这里也可以使用,但是为了新手能理解我们还是在下面使用
function demo(){
var a = 123;
console.log(a);
}
demo();//打印123
如果要全局复制a,则不能如下复制: 因为a的作用域仅限于函数demo,所以无法全局访问。 这也是执行后删除局部变量后的console.log(a)。 找不到原因
function demo(){
var a = 123;
console.log(a);
}
console.log(a); //a is not defined
如果定义了全局a,也可以在第二个script标签中访问
这是一个代码给你看
function demo(){
var a = 123;
b = 456
console.log(a,b);
}
demo();//123 456
console.log(b);//456
console.log(a);//a is not defined
为什么这里的b可以在方法中清晰的访问到呢? 细心的朋友可以看到我没有为b定义var。 这里,b 将被移动到窗口。 console.log(b)会返回到窗口找到ab,所以是可以的。 在同一窗口上还找到了一个演示方法
var未定义的属性可以配置全局属性
<script>
var var1 = 1;//不可配置全局属性
var2 = 2; //没有用var定义,可以配置全局属性
console.log(this.var1); //1
console.log(window.var1);//1
delete var1;//false 无法删除
console.log(var1);//1
console.log(delete var2); //true
console.log(var2); //not defined
</script>
作用域链
这里给大家介绍一下作用域链的代码
var a = "apple";
var b = "boy";
function demo(){
var a = "vue";
console.log(a); //vue
console.log(b); //boy
}
demo();
console.log(a);//apple
这里是为什么javascript 函数 变量,函数定义了一个局部变量a,所以demo上面的日志访问的是局部变量上面的a:vue,但是如果没有找到b,就会访问全局变量b:boy,而外部日志( a) 可以直接访问全局a:apple