作用域:变量开始创建到被系统回收的过程;
全局:在任意函数外创建的变量,
局部:在任意函数内创建的变量,
ES5:只用函数能够生成局部作用域,其他结构不可以
作用域链:现在当前作用域中查找,找到即执行,如果没有继续向上一次查找,找到即执行,如果找到全局中依然没有找到,报错,阻断程序运行。
var a = 20;
function Myfun(){
a = 30;
console.log(a + 10);
}
function Myfun_two(){
a = 50;
console.log(a + 20);
}
console.log(a); //20
Myfun(); //40
console.log(a); //30
Myfun_two(); // 70
console.log(a); //50
变量提升:如果使用了未声明的变量,正常情况会因找不到而报错,但是在使用下方出现了他的声明,会默认将他提升到使用之前,不包括值,先使用后声明,改变量会因变量提升可以找到,但是值为undefind;
存在意义:保证程序继续执行,只是失去了当前功能的值
//第一题
var a="全局变量";
function first(){
var a="first";
function second(){
var a="second";
console.log(a); // second
}
console.log(a); // first
second();
}
console.log(a); // 全局变量
first(); // ? 调用上面的结果才会结束
//第二题
//作用域练习题
var a="aa";
function test(){
alert(a); // 未定义undefiend 变量提升
var a="bb";
alert(a); // bb
}
test(); //
console.log(a); //aa
//第三题
var b="vv";
function test2(){
console.log(b); // 正确vv 现在作用域内找(var b)没有就向函数外找(b="avv" 只是赋值吧上面
// var b="vv" 的值改变)var b="vv"
b="avv";
console.log(b); // avv
}
console.log(b);// vv
test2();//
console.log(b);// avv
//第四题
var a = 12;
function fn(){
console.log(a) // 结果undefined因为下面有var,var a会被调用上去45则不会调用
//上去 如果下面没有var只有a=45 则会去找上面的var输出12
var a = 45;
console.log(a) // 45
}
fn();
function fu(){
console.log(11); // 11
function ff(){
console.log(22); // 22
}
ff()
}
fu();
var a = 12;
function fc(){
console.log(a); // 结果undediend return结束的是return下面的代码 本行输出console.log(a)
//他的作用域会在函数中先寻找return并不影响发现下面有var a 会出现提升变量的情况
return 4; //4 为函数返回值的结果 有返回值下面要新建变量来接收
var a = 45;
}
fc(); //
var c=fc();
console.log(c); //结果为4
来源:CSDN
作者:Jason–json
链接:https://blog.csdn.net/weixin_46146313/article/details/104154865