您的位置:首页 > Web前端 > JavaScript

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

2012-11-02 17:30 645 查看
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生成隐式全局变量
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐