JavaScript中的作用域、作用域链、预解析

作用域:

/* 变量--->局部变量和全局变量
* 作用域:就是变量的适用范围
* 局部作用域和全局作用域
* js中没有快级作用域---一对括号中定义的变量,这个变量可以在大括号外面使用
* 函数中定义的变量是局部变量
* */
// 样例1 --- 全局变量
while (true){
    var num = 10;
    break;
}
console.log(num);
// 样例2 --- 全局变量
{
    var num2 = 100;
}
console.log(num2);
// 样例3 --- 全局变量
if(true){
    var num3 = 1000;
}
console.log(num3);
// 样例4 --- 局部变量
function fun1() {
    var num4 = 10000;
}
console.log(num4);

作用域链:

/*作用域链:变量的使用,从里往外,层层的搜索,搜索到了就可以直接使用了
* 层层搜索,搜索到0级作用域的时候,如果还是没有那就报错
* */
// var num = 10; // 作用域链 级别:0
function f1(){
    // var num = 20; // 作用域链 级别:1
    function f2(){
        var num = 30; // 作用域链 级别:2
        console.log(num);
    }
}
f1();

预解析:(变量提升)

JavaScript 中,函数及变量的声明都将被提升到函数的最顶部。

JavaScript 中,变量可以在使用后声明,也就是变量可以先使用再声明。

JavaScript 只有声明的变量会提升,初始化的不会。

/*预解析:就是在浏览器解析代码之前,把变量的声明核函数的声明提前(提升)到该级作用域的最上面*/
// 变量的提升
// var num;
console.log(num);   // undefined
var num = 100;
// 函数的声明被提前了
f1();   // 使用
function f1(){ // 声明
    console.log("设个函数被执行了!");
}
// 下面不能执行
// var f2;
f2();
var f2 = function () {
    console.log(this.name); // f2 is not a function
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值