javascript - 关于js的命名函数表达式的疑惑
怪我咯
怪我咯 2017-04-10 15:35:04
[JavaScript讨论组]
(function() {
    var f = function f(f) {
        console.log(f);// 2
        f = 1;
        console.log(f);// 1
    }
    f(2);
    console.log(f);// function f(f)
})();
(function() {
    var f = function f() {
        console.log(f);// function f()
        f = 1;
        console.log(f);// function f()
    }
    f();
    console.log(f);// function f()
})();

我的理解是在同一作用域中形参优先级比同名函数名高,在函数体修改f只修改了arguments对象,第二个case中f应该是指向函数名,因为函数名不能重写,不知道理解是否正确?

怪我咯
怪我咯

走同样的路,发现不同的人生

全部回复(1)
天蓬老师
第一个函数:
(function() {
    var f = function f(f) {
        console.log(f);// 2 ->此处的输出是你调用函数时实参传入的 2;
        f = 1;
        console.log(f);// 1 ->此处的输出是你在函数体内改变的形参值 1;
    }
    f(2);
    console.log(f);// function f(f) ->此处的输出是你为var f 变量的赋值 f(f);
})();

第二个函数:
(function() {
    var f = function f() {
        console.log(f);// function f() ->此处的输出为var f变量的值 f();
        f = 1;
        console.log(f);// function f() ->此处的输出同上,解释:f()函数里面的f=1因为没有添加 var,其实是声明了一个window下的全局变量,获取的时候会采取就近原则,如果闭包作用域下找不到才会去全局作用域下查找;
    }
    f();
    console.log(f);// function f()
})();
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习
PHP中文网抖音号
发现有趣的

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号