变量提升全解析

1.变量的提升:将变量的声明提升到执行环境的最顶端
console.log(a);//输出结果 undefined
var a=10;
//相当于
var a;
console.log(a);//输出结果 undefined
var a=10;
1.0注:函数的参数,相当远在函数体内声明了局部变量
var a=0;
function aa(a){
alert(a)
a=3
}
aa(5)
alert(a)
//5,0
里面的a=3就修改的是局部变量的值,而不是全局变量
改全局变量
var a = 1;
function add(){
++a;
}
add();
console.log(a)
在函数体内,执行alert(a)和a=3,修改的的并不是全局变量a,而是参数a
1.1注:在函数体内:参数a的优先级高于变量a
function aa(a){
alert(a)
var a=3
}
aa(5)//5
同时:相当于在顶部声明了参数a,下面声明的a提升被忽略了
function aa(a){
var a;
alert(a)
a=3
}
aa(5)//5
2.函数提升=函数声明式提升+函数字面量提升
a:函数声明的提升:将函数提升至执行环境的最顶端
poo();
function poo(){
console.log(“aaa”);
}
//aaa
//相当于
function poo(){
console.log(“aaa”);
}
poo();
b.函数字面量提升:只提升标量的声明
foo();
var foo = function(){
console.log(“aaa”);
}
//foo is not a function
//相当于
var foo;
foo();
foo = function(){
console.log(“aaa”);
}
3.注意:函数提升在变量提升之上
console.log(foo);
function foo(){
console.log(111);
};
var foo = 0;

小结:
变量函数声明到顶部
字面量函数提变量
形参相当于声明一个局部变量
形参和里面的局部变量相同,或未申明的变量相同,都相当于声明了一个局部变量
形参大于局部变量
4.实例题
var getName = function() {
console.log(4);
};
function getName() {
console.log(5);
}
getName(); //4
//相当于
function getName() { // 函数声明的提升大于变量声明的提升
console.log(5);
}
var getName;
getName = function() { // 函数表达式不会提升
console.log(4);
};
getName(); // 4

getName(); //5
var getName = function() {
console.log(4);
};
function getName() {
console.log(5);
}
// 相当于:
function getName() {
console.log(5);
}
var getName;
getName(); // 5
getName = function() {
console.log(4);
};

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值