js 提升

a = 2;
console.log(a);
var a;
/*这里会输出2  如果按从上往下的执行顺序的话应该输出的是undefined,但是js编译器会把声明变量全部提升到顶部来进行变量声明。所以上面代码等同于:*/

var a;
a = 2;
console.log(a);

从上面例子初步理解了js变量提升后再看下面个例子:

console.log(a);
var a = 2;

按常规逻辑大多人肯定认为会输出2  结果是undefined  为什么呢   因为只有声明本身才会被提升   赋值是不会提升的 因为赋值不是编译阶段的事情,所以上面代码等同于:

var a;
console.log(a);
a=2

 函数提升:

foo();


// function foo() {
//     console.log('foo');//这里会正常输出
// }
var foo = function () {
    console.log('foo');//这里则会报typeerror
}

//说明函数声明会被提升  而函数表达式则不会提升

 函数提升优先级更高:

foo();

var foo;

function foo() {
  console.log('foo');  
}

/*
按照常规思维  函数和变量都提升了  为什么这里不会报typeerror错误 而是正常输出呢  因为函数声明的优先级高过变量声明   所以函数foo声明之后 变量foo属于重复声明而被自动忽略了
*/

猜你喜欢

转载自www.cnblogs.com/tudou1223/p/9863163.html