嗨!我是前端小M~~
作用域
作用(有效)域(区域,范围)变量生效的范围
- 全局作用域 :书写位置在全局,没有被任何函数{ }括起来,任何地方都能被访问
- 函数作用域:在函数声明时产生函数作用域,全局作用下无法访问函数内部变量,函数作用域可以访问全局变量,若全局函数中存在与函数作用域相同名字的变量,就近原则
- 块级{ }作用域:块级作用域 let const { }暂时性死区,作用域外访问不到
for (let i = 0; i < 3; i++) { for (var i = 0; i < 3; i++) {
console.log(i); // 0 1 2 console.log(i); //0 1 2
} }
console.log(i); // i is not defined console.log(i); //3
- eval( )忽略不计
函数提升
1)声明式函数存在提升(只提升声明)
console.log(a); //Cannot access 'a' before initialization console.log(a);
let a = 5; var a = 5;
2)函数是一等公民,函数提升在变量提升之前,出现重名,被覆盖 无效
let test = 5; function test(){
function test(){ console.log(`heihei`);
console.log(`heihei`); }
} let test = 5;
console.log(test); //5 ====变量提升=====> console.log(test); //5
console.log(typeof test);//num console.log(typeof test);//num
test(); //未声明 5();//???
3) 变量使用前一定要声明,否则为全局变量
在函数中获取另一个函数的值
1.局部变量赋值给全局
let b = 2; //被a赋值为1
let fn1 = function (){
let a = 1; //局部
b=a; //局部变量赋值给全局
}
let fn2 = function (){
console.log(b); //1
}
fn1();
fn2();
2.以形参的形式传递
let fn1 = function () {
let a = 1;
fn2(a);
}
let fn2 = function (x) {
console.log(x); //1
}
fn1();
3.以返回值的形式传递
let fn1 = function () {
let a = 1;
return a; //1
}
let result = fn1();//1
let fn2 = function () {
console.log(result);//1
}
fn2();