gpt4 book ai didi

javascript - 无法立即在 Javascript 中调用匿名函数

转载 作者:数据小太阳 更新时间:2023-10-29 06:12:29 27 4
gpt4 key购买 nike

我已经研究框架开发几个星期了,我遇到了 lib 开发世界中强烈建议和压力的东西,立即调用匿名函数。

我始终无法让它发挥作用,而且我也未能找到详细解释其使用和背后逻辑的资源。

这是我目前所知道的:

  • 立即调用 - 它立即匿名运行所有内容。
  • 它是匿名的 - 它不带有名称,因此外部代码无法“访问”它内部的代码。
  • 您可以传递全局窗口、对象和未定义的参数 - 这就是我所知道的一切,但并不完全理解它们。

我不仅在寻找详细的资源,而且在寻找解释其背后逻辑的资源。因为我觉得很不合逻辑。

这是我所拥有的:

(function( window, document, undefined ) {
window.myThingy = myThingy;

var myThingy = function() {
};

myThingy.prototype = {
constructor: myThingy,
create: function( elementToBeCreated ) {
return document.createElement( elementToBeCreated );
}
};

})( window, document );

然后,

myThingy().create("div");

但它仍然说 myThingy() [object] 不是函数。

我做错了什么?为什么我应该使用立即调用函数而不只是创建一个全局 myThingy = function() 对象?为什么我必须使用 window

我知道网上有很多关于这个的资源,但我一个都看不懂。他们中的一些人半途而废,一些人试图详细说明,但未能解释关键内容。 为什么在开发框架时如此强调这一点?

别担心,我不是要“重新发明轮子”,而是要真正学习 JavaScript,而不仅仅是预先打包的东西。

一个好的答案应该包含:

  • 一个很好的资源,它解释了立即调用匿名函数背后的逻辑
  • 对该链接的洞察
  • 我提供的代码做错了什么

最佳答案

首先,当您尝试将函数分配给全局对象时,您还没有定义函数,因此它是未定义的:

window.myThingy = myThingy;
console.log(myThingy);//undefined

你需要在定义myThingy之后做赋值:

(function( window, document, undefined ) {


var myThingy = function() {
};

myThingy.prototype = {
constructor: myThingy,
create: function( elementToBeCreated ) {
return document.createElement( elementToBeCreated );
}
};

window.myThingy = myThingy;

})( window, document );

好的,接下来,你不能用

myThingy.create("div");

因为 myThingy 是一个函数而不是一个对象。当 new 关键字被发布到一个函数时,函数对象被创建。您可以进行此更改以将函数转换为函数对象:

window.myThingy = new myThingy();//create a function object

这种模式不是所有框架的实现方式,而是相似的。有时会有更多的抽象。但是,进行这些更改将使您的方法发挥作用。

这是您的代码演示:http://jsfiddle.net/ZjRJW/


链接

以下是我最喜欢的一些:

http://ejohn.org/blog/simple-class-instantiation/

http://ejohn.org/apps/learn/

http://ejohn.org/blog/simple-javascript-inheritance/

http://jibbering.com/faq/notes/closures/

https://developer.mozilla.org/en-US/docs/JavaScript/Guide/Details_of_the_Object_Model

http://javascript.crockford.com/prototypal.html

关于javascript - 无法立即在 Javascript 中调用匿名函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14529532/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com