479 变量提升机制

变量提升(声)

**栈内存、作用域、执行上下文【执行环境】**

当浏览器开辟出供代码执行的栈内存后,代码并没有自上而下立即执行,而是继续做了一些事情:把当前作用域中所有带var、function关键字的进行提前的声明和定义 =>变量提升机制 【预解析】

  • 带var的只是提前声明(declare): “var a;” ,如果只声明,没有赋值,默认值是undefined
  • 带function的不仅声明,而且还定义了(defined): “a=13”定义其实就是赋值,准确来说就是让变量和某个值进行关联
console.log(a); // undefined
var a = 12;
var b = a;
b = 13;
console.log(a); // =>12


// ---------------------


console.log(sum(10, 20));  // 30
function sum(n, m) {
    return n + m;
}


// ---------------------


//  函数表达式方式,由于使用VAR来创建SUM,变量提升阶段只会声明变量,不会赋值,所以此时函数在前面执行,函数是没有值的,不能执行(真实项目中这种方式最常用,因为它操作严谨)
console.log(sum); //=>undefined
// sum(10, 20); //=>Uncaught TypeError: sum is not a function
var sum = function (n, m) {
    return n + m;
};
// let sum=(n,m)=>n+m;
console.log(sum(10, 20));

猜你喜欢

转载自www.cnblogs.com/jianjie/p/13189044.html
今日推荐