js函数作用域

     调用函数时,创建函数作用域,函数执行完毕后,函数作用域销毁
//变量提前 
//并不是赋值提前,变量a提前此时a的值为undefined,
//而同名的函数提前,将会覆盖变量a,使a的值成为为函数。
     var a = 10;

function fun(){
    
    var a = "我是fun函数中的变量a";
    var b = 20;
    
    //console.log("a = "+a);
    
    function fun2(){
        console.log("a = "+window.a);
    }
    
    fun2();
    
}

//fun();
//console.log("b = "+b);

使用var关键字声明的变量,会在函数中所有的代码执行之前被声明

函数声明也会在函数中所有的代码执行之前执行

 也可以这么认为在声明变量和显示声明函数的时候,函数的值会覆盖变量。

对于变量覆盖:只是针对重新声明变量。

    同一个作用域中,会进行值得覆盖,函数覆盖变量;变量覆盖变量;函数覆盖函数。
    .作用域嵌套

当一个作用域嵌套在另一个块或函数中,就产生了作用域嵌套。

function fun(1){
var a =  b++;
function fun1(c){
console.log(a,b,c);
}
fun1(c++);
}
fun(1);
  1,在当前作用域无法找到某变量时,向外层查找。
 ,2,不同作用域,不会出现覆盖情况
  3,  如果在声明变量不加var,他会从当前域中是否存在该变量,如果没有,继续去上一层作用域查找,如果有就覆盖,如果没有继续查找,直到查找到顶层作用域。最后没有的话。会将该变量挂载在window对象中作为属性或者方法。作为全局变量,我们可以直接调用也可以直接使用window.变量名字
fn=()=>{
a = 2;
};
fn();
console.log(window.a);
块作用域

块作用域的用处:变量最好近距离声明,越近越好,避免污染。

1.let
let声明的变量可以将变量绑定到所在的任意作用域中即({ … }内部)
使用let声明的变量不会被提升。

function fun(1){
var a =  b++;
function fun1(c){
console.log(a,b,c);
console.log(d);
}
fun1(c++);
let d = 2;
console.log(d);
}
fun(1)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值