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生成隐式全局变量