面试 - javascript中函数表达式的一些问题???

查看:75
本文介绍了面试 - javascript中函数表达式的一些问题???的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

问 题

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

我给出我不太成熟的理解哈,var a是函数表达式,也是局部变量,而a=function()是全局变量吧,对于第二个代码段,局部变量执行一次也就被回收啦,所以后面的也就执行全局变量,,,,不知道理解的对不对啊?
更新一下--------------------------------------------------------------------------------------------------------------------------------
var a=100;
function fn(){

alert(a);
var a=200;
alert(a);

}
fn();
fn();
//undefined
//200
//undefined
//200

解决方案

你这个不涉及回收(也就是传说中的闭包)相关的概念。

你这里只是简单的赋值而已。
var a定义了一个变量,变量的值是一个函数。而且是全局的变量。
你在函数中,是对变量a的值进行了改写,所以执行一次之后,变量a的值发生了变化。

如果你这样写,可能理解起来会更深刻一些:

var a=null;//定义变量
//赋值,值类型为函数
a=function(){
    console.log("1");
    //重新赋值
    a=function(){
        console.log("2");
    }
}

这篇关于面试 - javascript中函数表达式的一些问题???的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆