Var和函数的提前声明

function fn(a) {
    console.log(a);
}
fn(1);
//输入1

1-----输出1,想必大家都没有任何的问题。将1作为参数引入函数中,自然得到1

function fn(a) {
    var a=5;
    console.log(a);
}
fn(1);
//输出5

2-----输出5,虽然在一开始在参数中a=1,但执行函数的时候,a又重新赋值了。a=5,自然就输出5

function fn(a) {
    console.log(a);
    var a=5;
}
fn(1);
//输出1

3-----输出1,还未遇到var a=5的时候,就已经打印输出了。

function fn(a) {
    console.log(a);
    var a=5;
    function a(){};
}
fn(1);
//输出ƒ a(){}

相当于这样:

function fn(a) {
    function a(){};
    console.log(a);
    var a=5;
}
fn(1);
//输出ƒ a(){}

4-----输出f a(){},Var和函数,函数是会优先提升的,执行function a(){},此时a()函数相当于变量使用。打印输出a,自然就是打印出函数   f a(){}

function fn(a) {
    console.log(a);
    var a=5;
    function a(){};
    console.log(a);
}
fn(1);
//输出ƒ a(){}
//输出5

上面这个,相当于这样:

function fn(a) {
    function a(){};
    console.log(a);
    var a=5;
    console.log(a);
}
fn(1);
//输出ƒ a(){}
//输出5

5-----虽然一开始var  a=5是在function a(){}之前,但函数和变量同时存在的话, 是会先将函数提升上去,也就是移上去。

var a=1;
function test(){
    console.log(a);
    var a=1;
}
test();
//undefined

6-----全局变量是1,但进不去函数里面。函数里面变量在这里是不会提升的。直接输出没有定义没有赋值的a,自然就是undefined

function test(){
    var a;
    console.log(a);
    a=1;
}
//undefined,未赋值

7-----var a;没有赋值,自然就是undefined

var b=2;
function test2(){
    window.b=3;
    console.log(b);
}
test2();
//3
8-----任何通过附加在window上的变量都相当于声明一个全局变量,或者是给全局变量赋值

var b=2;
function test2(){
    console.log(b);
}
test2();
//2
9-----函数里面没有变量,函数便会往外面寻找

var b=2;
function test2(){
    console.log(b);
    var b=3;
}
test2();
//undefined
上面这个,其实执行的就是这样子的:

function test2(){
    console.log(b);
}
test2();
//undefined
10-----就是酱紫。

c=5;
function test3(){
    window.c=3;
    console.log(c);
    var c;
    console.log(window.c);
}
test3();
// 3 x
// 5 x
这一题有些难度,我一开始做的时候,也以为是3和5  原谅偶,老夫也是前端小白。其实下面的答案是

c=5;
function test3(){
    window.c=3;
    console.log(c);
    var c;
    console.log(window.c);
}
test3();
// undefeined
// 3
我一开始以为这段代码简化是这样的:

function test3(){
    var c;
    console.log(c);
    window.c=3;
    console.log(window.c);
}
test3();
// undefeined
// 3

但其实,这是错的。真的的执行过程应该是下面这样

c=5;//声明一个全局变量c   
function test3(){
    var c;//变量声明提升,声明一个局部变量  
    window.c=3;//改变全局变量c的值  
    console.log(c);//由于此时的c是一个局部变量c,并且没有被赋值 c就是undefined      
    console.log(window.c);//此时的c就是一个全局变量c,也就是值为3  
}
test3();

希望对大家有所帮助,也多多关注老夫。小埋咕噜咕噜喝下一瓶可乐......

  • 4
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值