我有以下Java脚本代码

var obj = (function(){
    var privateVariable1 = 5;

    function privateFunction(){
        alert(privateVariable1);
    }

    obj1 = {};
    obj1.publicVariable = privateVariable1;
    obj1.publicFunction = function(){
        privateFunction();
    }

    return obj1;

}());


alert(obj.publicFunction());

警报5,且未定义。 我不明白为什么它也警报未定义。 谁能告诉我为什么这种现象发生?

===============>>#1 票数:2 已采纳

函数在javascript中默认返回undefined ,并且您没有从obj.publicFunction()返回任何内容,因此它返回undefined ,这是您执行操作时收到的警报

alert(obj.publicFunction());

===============>>#2 票数:2

publicFunctionprivateFunction都不返回值。

改成:

var obj = (function(){
    var privateVariable1 = 5;

    function privateFunction(){
        alert(privateVariable1);
        return privateVariable1;
    }

    obj1 = {};
    obj1.publicVariable = privateVariable1;
    obj1.publicFunction = function(){
        return privateFunction();
    }

    return obj1;

}());

===============>>#3 票数:1

它提醒5,因为在publicFunction你叫privateFunction ,这将提醒privateVariable1 (即5在这种情况下)。 因为您在警报中调用了函数,并且publicFunction不返回任何内容,所以它将返回undefined

  ask by Yeasin Abedin Siam translate from so

未解决问题?本站智能推荐:

3回复

匿名Javascript函数还是存储在变量中?

调用javascript函数有多种方法,大多数情况下,我使用匿名函数,因为它可以在我喜欢的任何地方触发。 我似乎无法理解为什么使用变量方法而不是匿名函数。 对我来说主要的缺点是由于起重问题。 任何人都可以解释或提供一个真实的例子,何时将函数存储在变量中?
1回复

javascript中的范围和关闭奇怪

这是昨天在TC39上提出的。 你可以在这里找到要点: 有人可以向我解释这件事是如何运作的吗? 对于记录,它仅在非严格模式下工作 。 谢谢。
1回复

Javascript:函数中的变量重新声明导致未定义[重复]

这个问题已经在这里有了答案: JavaScript变量未定义vs未定义 2个答案 为什么console.log(foo)产生undefined而不是'bar' —但如果将var foo替换为foo则会产生'bar' ? 我知道重新声明变量是不好的做法,但是
3回复

用不同的方式编写函数会在JavaScript中带来不良效果?

更新: 问题解决了! 我意识到这样做的原因是由于“吊装”。 基本上,JavaScript解释器解析代码并在函数开始时声明所有变量(但不初始化它们)。 这就是第二个示例不起作用的原因。 因为JavaScript解释器声明var changed; 在函数的开头,但是直到它到达代码主
4回复

JavaScript提升函数与函数变量

这是我的JavaScript代码: 现在这里输出: 我的问题是关于c()和b()为什么表现不同。 并且b应该引发错误,例如未定义b。
2回复

JavaScript中的提升顺序

我想确切地知道上面的代码在吊起时变成什么顺序。 理论1: var和function s之间的顺序保持原样: 理论2: var s在function s之前: 理论3: function先于var : 哪个理论是正确的?
2回复

当函数作为参数传递时,JavaScript函数提升不适用? [重复]

这个问题已经在这里有了答案: var functionName = function(){} vs function functionName(){} 38个答案 Javascript有一个有趣的事情,称为函数提升 ,这意味着我们可以在声明函数之前(即,从视觉上)使
1回复

Javascript变量提升在Scratchpad中的行为不符合预期

我正在关注Mozilla开发人员Javascript教程,其中有一个有关变量托管的部分。 本教程曾提到使用Firefox的Scratchpad来编辑javascript以快速保存并查看代码运行。 我使用的代码(从教程复制粘贴)为: 但是console.log(x === unde
4回复

我们是否应该将所有JavaScript变量手动提升到函数定义的前面?

我听说,由于JavaScript会将所有局部变量都提升到函数的开头,因此最好让程序员自己提升它,以便将一切视为实际发生的方式。 示例是: 这是在函数开始时声明所有局部变量。 但是我也在一些经典代码(例如React JS的源代码)中看到了 也就是说,在第一次使用i时声明
1回复

JavaScript中的吊装声明与表达式

我想更多地了解何时使用函数表达式VS在JavaScript函数声明,偶然发现这个制品,它下面的代码片段: 令我惊讶的是,由于吊装,该值为8 。 当一个声明被吊起时,它是否一直移动到函数的顶部(它会在返回3的第一个bar()之前被吊起),还是会在所有其他函数声明之后被吊起(它将被吊起)在