javascript - 为什么从匿名函数调用方法时,这是对象,但直接调用会抛出错误

标签 javascript closures

具有以下内容:

function Person() {
    this.name = "john";
    this.getName = function() {
        return this.name;
    };
}

var me = new Person();

为什么要进行程序:

setTimeout(function(){alert(me.getName())}, 3000);

在执行过程中返回 john:

setTimeout(me.getName(), 3000);

创建一个

Uncaught TypeError: Object [object DOMWindow] has no method 'getName' 

最佳答案

问题是 setTimeout将一个函数作为第一个参数。

在您的代码片段中:

setTimeout(function(){alert(me.getName())}, 3000);

您传入一个函数作为第一个参数,然后对其进行评估以执行警报。

在第二个片段中,您传递了调用函数的结果,因此:

setTimeout(me.getName(), 3000);

变成这样:

setTimeout('约翰', 3000);

由于 setTimeout 的工作方式,它允许您传入一个字符串作为第一个参数,运行时将尝试将其作为函数调用,从而导致错误。

关于javascript - 为什么从匿名函数调用方法时,这是对象,但直接调用会抛出错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8934391/

相关文章:

javascript - 处理 ember 中的嵌入数据

javascript - 如何修复/编辑此正则表达式?

javascript - 使用闭包编译器删除 console.log

javascript - IIFE 在 ES6 之后有何用处?

scala - Spark 任务不可序列化(案例类)

javascript - MongoDB map-reduce(通过nodejs): How to include complex modules (with dependencies) in scopeObj?

javascript - HTML/CSS 绝对位置子项不会随绝对位置父项一起移动

javascript - 特定 Monaco 编辑器实例的 CompletionProvider

javascript - 将 javascript 闭包转换为柯里化(Currying)函数

循环内的 JavaScript 闭包——简单实用的例子