优先定义,使用滞后

优先定义,使用滞后

var f = function(){
    console.log('立即执行 f()');
    f.p = 'fp';
    function f(){
        console.log('执行 f()');
    }
    return f;
}();    //立即执行 f()
f();    //执行 f()
f.p;    // fp

(图1)变量 f 是一个立即执行函数,内部又嵌套了一个同名函数 f()。虽然 f.p 的赋值语句位于内嵌函数 f() 定义之前,但是在执行的时候赋值语句滞后于函数的定义。

var g = function(){
    console.log('立即执行 g()');
    function f(){
        console.log('执行 f()');
    }
    f.p = 'fp';
    return f;
}();    //立即执行 g()
g();    //执行 f()
g.p;    // fp

(图2)将变量 f 改成了 g,并将 f.p 的赋值语句写到内嵌函数的下方,这比图1的写法更容易理解。

优先定义,使用滞后
图3正常,图4报错。尽管图4的变量 f 是一个立即执行函数,但是立即执行函数与函数并不是一回事。
修正方法1:代码改成图3那样,f 不再立即执行,f 是全局函数。
修正方法2:代码改成图1或图2那样(立即函数里面添加内嵌函数)。

本作品采用《CC 协议》,转载必须注明作者和本文链接
讨论数量: 0
(= ̄ω ̄=)··· 暂无内容!

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!
未填写
文章
48
粉丝
15
喜欢
126
收藏
103
排名:134
访问:3.7 万
私信
所有博文