函数变量提升易混淆题

1. a='哈哈';         

var a = 5;

console.log(a); 

结果为5 ,var a =5 会在开头声明var a ; 之后再是a=‘哈哈’   a=5;

2. var sum;
console.log(sum);
 sum = function(){
    console.log('我是函数表达式');
}
sum();

结果为undefined  '我是函数表达式'

3.  var sum = function(){
    console.log('我是函数表达式方式');
}
sum();//输出‘我是函数表达式方式’
sum = '哈哈';

sum();//报错       因为这时候sum已经是字符串‘哈哈’   当做函数去调用必然报错

4.sum = '哈哈';
function sum(){
    console.log('我是函数表达式方式');
}
    sum();//报错      因为自定义函数可变量提升  相当于在第一行是 var sum ; sum=function(){ console.log('.....') };之后再是sum='哈哈'   最后一行是sum()  字符串不能被当作函数调用   故报错

5.  var sum;
    sum = 5;
 sum = function (){
    alert(111);
 }
 console.log(sum);
sum();

效果是运行函数显示alert(....)  之后控制台显示函数体  逻辑是一次按顺序运行的

6.

var a = 5;

function sum(){

    var a = 3;

    console.log(a);
}

sum();

console.log(a)

结果是 3  5    因为有自定义函数  故变量提升  相当于在第一行就是 var a ; a=function(){....}    之后是a =5;   所以先是函数内部  后是全局变量

7.

if(true){
    var a = 5;
}
console.log(a);
for (var i = 0; i < 3; i++) {
    
}
console.log(i);// 2    3

因为JS是弱类型语言   所以没有块级作用域   这个就不同于自定义函数了  不考虑变量提升   最后一个循环是在循环体之外  故为3

8.

var a = 5;
function sum(){
    var a = 1;
    console.log(a);
}
sum();
console.log(a);

结果是1  5   因为变量提升  先算函数   之后a的值改变为5   

9.

var a = 5;
function sum(){
    
    console.log(a);
    var a = 1;
}
sum();
console.log(a);

结果是undefined  5   变量提升  先算自定义函数  则先在函数体内算  函数体内  相当于var a ;  之后console.log(a)  再之后是a = 1

所以函数运行起来时  是undefined   再之后是函数体之外的

10.

var a = 5;
function sum(){
    
    console.log(a);
    var a = 1;
    console.log(a);
}
sum();
console.log(a);

结果是5  1   1   运行到函数体内时   先没有在函数体有定义  则在全局变量中找   有找到的var  a =5 ;则第一个a取5  之后变为1  在之后在函数体之外   仍然为1   (此题超级有技术含量    小伙伴们多理解)

11.

function a(){
    var a = 2;         
 };
 a();
 console.log(a)

结果显示 函数体;a()直接跳过   因为里面只有一个var a =2;   之后相当于自定义函数变量提升;

12.

a=1;
 function a(){
    var a = 2;
    console.log(a)         
         
 };
 console.log(a)

结果显示 1   这时候函数已经赋值为1

13.

function a(){
    var a = 2;
    console.log(a)         
         
 };
 a();
 console.log(a)    结果显示2  函数体   前一个2是指调用函数  但a本身并不受影响 仍然是函数体;

14.

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值