1.局部变量与全局变量
局部变量:
局部变量的作用域只能在当前函数中
每一个函数中都可以声明定义名称相同的变量,而不被影响
function test1() {
//name变量在test1函数中
//name变量是局部变量
//局部变量的作用域只能在当前函数中
//每一个函数中都可以声明定义名称相同的变量,而不被影响
var name = "zhangsan";
window.alert("name==" + name); //name==zhangsan
}
//test1();
/* function test2() {
window.alert("name==" + name); //name==
}
test2();
*/
/* function test2() {
var name = "lisi";
//window.alert('name==' + name); //name==lisi
window.alert("quanju==" + quanju); //quanju==全局变量
}
test2() */
全局变量:
函数外声明定义的变量就是全局变量
网页中所有脚本和函数均可使用
var quanju = "全局变量";
function test1() {
//name变量在test1函数中
//name变量是局部变量
//局部变量的作用域只能在当前函数中
//每一个函数中都可以声明定义名称相同的变量,而不被影响
var name = "zhangsan";
window.alert("name==" + name); //name==zhangsan
}
//test1();
/* function test2() {
window.alert("name==" + name); //name==
}
test2();
*/
/* function test2() {
var name = "lisi";
//window.alert('name==' + name); //name==lisi
window.alert("quanju==" + quanju); //quanju==全局变量
}
test2() */
如果变量在函数内没有声明(没有使用 var 关键字),该变量为全局变量
function test3() {
testname = "没有声明的变量"; //是window 对象的变量【全局变量】
window.alert('testname==' + testname); //testname==没有声明的变量
}
test3();
function test4() {
window.alert('testname==' + testname); //testname==没有声明的变量
}
test4(); */
函数参数只在函数内起作用,是局部变量
function test5(myname) {
window.alert('myname==' + myname); //myname==张三
}
//test5('张三');
function test6() {
window.alert('myname==' + myname); //test6不能用test5的参数
}
//test6('张三');
你的全局变量,或者函数,可以覆盖 window 对象的变量或者函数。
window.doxname = 'dox'; // window 对象的变量
var doxname = 'hello'; //全局变量
function test7() {
//全局变量会覆盖window 对象的变量
window.alert('doxname==' + doxname); //doxname==hello
}
//test7();
2. 闭包
「函数」和「函数内部能访问到的变量」的总和,就是一个闭包。
错误的认识:1.闭包不是函数套函数
错误的认识:2.闭包中的函数是可以没有return语句
function test1() {
var local = "变量"; //局部变量
function foo() { //foo函数
console.log(local);
}
}
test1();
闭包的作用:
闭包常常用来「间接访问一个变量」。换句话说,「隐藏一个变量修改权利」
用局部变量别人又访问不到,怎么办呢?
暴露一个访问器(函数),让别人可以「间接访问」
function test1() {
var local = "变量"; //局部变量
function foo() {
return local;
}
return foo;
}
function test2() {
//调用test1函数,得到foo函数,被t1接收
var t1 = test1();
//调用t1就是就是访问foo函数
var val = t1();
alert(val);
}
test2(); //变量