优先定义,使用滞后

优先定义,使用滞后

var f = function(){
    console.log('立即执行 f()');
    f.p = 'fp'; // 此f并非第一行的f,而是下方f
    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)将图1中的变量 f 改成 g,并将 f.p 的赋值语句写到内嵌函数的下方,这样就容易理解图1的写法了。

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


简单一点,就是下面这样

var f = function(){
    f.p = 'fp'; // 非全局 f
    function f(){ }
}
f();
f.p;    // undefined
var f = function(){
    f.p = 'fp'; // 全局 f
    // function f(){ }
}
f();
f.p;    // fp
本作品采用《CC 协议》,转载必须注明作者和本文链接
讨论数量: 0
(= ̄ω ̄=)··· 暂无内容!

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!
未填写
文章
63
粉丝
17
喜欢
140
收藏
118
排名:132
访问:7.4 万
私信
所有博文
社区赞助商