声明提前

之前写代码时常常没有注意这个声明提前,今天有时间就理顺一下声明提前,虽然不常用,但是理顺有助理解别人的代码。

声明提前:

1.变量声明提前

(1) 使用var关键字声明的变量会在所有代码执行之前,被声明,但是未赋值

console.log('a:',a);
var a = 10;
console.log('b:',b);
b = 20;
console.log(b);
console.log(window.b);
console.log(window);

如上图结果是a的值为undefined, b未定义,变量a的写法等同于下面的写法,

var a
console.log('a:',a);
a = 10;

(2) 没有使用变量关键字声明的变量等同于直接将值赋给window对象,如:b = 20等同于window.b = 20

当注释console.log('b:',b),结果如下图

console.log('a:',a);
var a = 10;
//console.log('b:',b);
b = 20;
console.log(b);
console.log(window.b);
console.log(window);

b的值被保存到window对象上了,调用b和window.b的值是一样的。

2.函数声明提前

(1) 使用函数声明形式( function 函数名(){} )创建的函数,会在所有代码执行之前被创建

fn();
function fn(){
    console.log('使用函数声明形式');
}
fn2();
var fn2 = function(){
    console.log('使用var等关键字,函数表达式');
}

(2) 使用var等关键字,函数表达式创建的函数,同变量声明提前相似,先声明,但是未赋,结果见上图

扫描二维码关注公众号,回复: 1815217 查看本文章

fn2函数的写法等同于下面的代码

var fn2;
fn2();
fn2 = function(){
    console.log('使用var等关键字,函数表达式');
}

猜你喜欢

转载自blog.csdn.net/zjy_android_blog/article/details/80863286