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

发布于 2022-09-02 14:10:27 字数 975 浏览 18 评论 0

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

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

奢望 2022-09-09 14:10:27

函数就是对象,对象都是引用赋值,所以a=function() {...}就是指在内存中有一个函数,a指向此函数的地址,c=a就是指让c也指向此函数的地址,然后再给a赋值就是指让a指向其他内存地址。理解了这点上述问题就都迎刃而解了。

高冷爸爸 2022-09-09 14:10:27

这里从头到尾都没有局部变量,也和回收搭不上关系。你又没有在函数里面var一个a,所以函数里面的a是仍旧是全局变量。

所以最后两个程序的差别在于,先执行c函数会修改a函数,而反过来则不会修改c函数。

三月梨花 2022-09-09 14:10:27

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

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

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

var a=null;//定义变量
//赋值,值类型为函数
a=function(){
    console.log("1");
    //重新赋值
    a=function(){
        console.log("2");
    }
}
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文