var name = "global";
function testName() {
alert(name);
var name = "local";
alert(name);
}
testName();
这样调用时 第一个alert是undefined
var outerName = "漠漠";
function outerFn() {
alert(outerName);
var name = "大漠穷秋";
function innerFn() {
alert("[" + outerName + "、" + name + "]一枝红杏出墙来。");
}
return innerFn;
}
var cache = outerFn();
cache();
两个alert都能正常输出,这儿变量的作用域都一样,为什么会出现这种情况
function作用域
function testName() {
alert(name);
var name = "local";
alert(name);
}
testName();
这样调用时 第一个alert是undefined
var outerName = "漠漠";
function outerFn() {
alert(outerName);
var name = "大漠穷秋";
function innerFn() {
alert("[" + outerName + "、" + name + "]一枝红杏出墙来。");
}
return innerFn;
}
var cache = outerFn();
cache();
两个alert都能正常输出,这儿变量的作用域都一样,为什么会出现这种情况
function作用域
function testName() {
alert(name);
var name = "local";
alert(name);
}
testName();等价下面的var name = "global";
function testName() {
var name;
alert(name);
name = "local";
alert(name);
}
testName();
var outerName = "漠漠";
function outerFn() {
alert(outerName);
var name = "大漠穷秋";
function innerFn() {
alert("[" + outerName + "、" + name + "]一枝红杏出墙来。");
}
return innerFn;
}
var cache = outerFn();
cache();
又怎么解释???
var name = "global";
function testName() {
alert(name); //输出undefined,是因为函数内部定义了name的值屏蔽了函数外面全局变量的值,但这时还没有给它赋值,所以输出为undefined
var name = "local";
alert(name);
}
testName();//如果改成以下:
var name = "global";
function test() {
alert(name); //输出global,是因为在函数内部如果没有定义该变量,就可以直接读取全局变量
}
test();
var outerName = "漠漠";
function outerFn() {
alert(outerName); //输出漠漠,是因为函数内部没有定义outerName的值,所以直接读取外部函数全局变量的值,如果改为name,照样输出undefined
var name = "大漠穷秋";
function innerFn() { //这是一个闭包函数,在这里可以读取到outerFn里面的name的值
alert("[" + outerName + "、" + name + "]一枝红杏出墙来。");
}
return innerFn;
}
//闭包就是能够读取其他函数内部变量的函数
var cache = outerFn();
cache(); //输出[漠漠、大漠穷秋]一枝红杏出墙来。介意楼主多去看下js的作用域问题和什么是闭包函数,基本就可以明白了~
function testName() {
alert(name);
var name = "local";
alert(name);
}
testName();相当于
var name = "global";
function testName() {
var name=undefined;
alert(name);
name = "local";
alert(name);
}
testName();
这样调用时 第一个alert是undefined,是函数作用域中的name;