JS作用域为“函数级作用域”,记住最简明的一句“函数中声明的所有变量,无论是在哪里声明的,在整个函数中它们都是有定义的。”QQ253079952

JS作用域为“函数级作用域”,记住最简明的一句“函数中声明的所有变量,无论是在哪里声明的,在整个函数中它们都是有定义的。

var local='sdf';

function local(){
    var local;
    document.write(local);//undfined
    local='sdfsf';
    document.write(local);//sdfsf    
}


这也就是 为什么一般初学者看到上面这个方法时,都以为第一个输出的值应该是sdf,以前我也这样认为,百思不知其解,现在有点小眉目了,以为函数内不论在哪儿定义的同名的局部变量,都会影响这整个函数,虽然解析时是一行一行解析的,这儿可能是javascript解释器里可能封装了一个类,判断如果一个函数内变量况且和函数外的全局变量重名的话,他就把这个函数的变量提前定义成局部变量,不论这个局部变量是在函数内的第一行,还是第二行 在一个alert输出的后面的一样。在整个函数内都成立。

S作用域为“函数级作用域”,记住最简明的一句“函数中声明的所有变量,无论是在哪里声明的,在整个函数中它们都是有定义的。”
*首先,只是在这个函数中有定义,也就是说,在输出语句后定义和输出语句前定义是一样的结果,最后变量的值都是“undefined”,下面两种写法结果一样;

function local(){   
    document.write(local);
    var local;
}
function local(){
   
    document.write(local);//undfined
    var local='sdfsf';
    document.write(local);//sdfsf    
}


还有就是未声明的变量其实就是未定义的变量

比如 我直接alert(a);   //其实这样是属于未定义  所以会报错  而不是输出 undfined

比如 var a ;  alert(a);  //这样的话 输入定义但是没有赋值 所以会输出undfined


但是像这样的话:

function   sss(){

a='sdfsf';

alert(a);

}


对象会把a生成隐式全局变量




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值