1

查看一些遗留代码并看到它。函数体是在纯Javascript中完成的,没有使用任何第三方库。

有人能解释一下““在中(函数(){})(此)?

完整代码:

(函数(){var根=此;变量SOMEVAR;SOMEVAR=根。SOMEVAR={};SOMEVAR.windowOffset=0;SOMEVAR.defaultBase=195;SOMEVAR.resizeIFrame=函数(){//一些代码};SOMEVAR.resetIFrameSize=函数(高度){//一些代码}   窗口。SOMEVAR=索梅瓦尔;})(本);

实际上,在我问这个问题之前,我已经阅读了所有与“this”相关的用法。我只是找不到适合我阅读的那些用法。不知何故,我认为这里的“this”甚至没有必要,因为所有代码都想创建“SOMEVAR”并将其绑定到“window”。我说得对吗?

谢谢

  • 表示您想要的任何内容或默认情况下的所有内容。
    – 丹达维
    评论 2015年4月16日5:12
  • 好像是个IIFEen.m.wikipedia.org/wiki/即时invoked_function_expression允许访问外部对象,而不是直接使用它,而是通过参数?
    – 12月
    评论 2015年4月16日5:12
  • 对于函数式JS程序员来说,这是一个未命名但仍通过的参数。
    – 丹达维
    评论 2015年4月16日5:18

4个答案4

重置为默认值
0

这是一个有点奇怪的例子即时调用函数表达式(IIFE)。第一部分:

(函数(){})

只定义一个函数(不需要外括号)。然后调用此函数,传递作为一个论点。通常,人们会声明一个参数,然后对函数中的参数进行处理:

(功能(上下文){//根据上下文做某事})(本);

实际引用的对象是什么取决于此代码的执行位置以及strict模式是否有效。请参阅的文档了解更多信息。

2
  • 完整的代码是:(function(){var root=this;var SOMEVAR;SOMEVAR=root.SOMEVAR={};SOMEVAR.windowOffset=0;SOMEVAR.defaultBase=195;SOMEVAR.resizeIFrame=function(){//一些代码};SOMEVAR.resetIFrameSize=函数(高度){//some codes}窗口。SOMEVAR=SOMEVAR;})(本);让我困惑的是,这里的“这个”似乎没有用处。它是? 评论 2015年5月7日16:28
  • @贾斯汀·J-不,它似乎没有用处。正如我所说,这是一个奇怪的例子。如果写下来的话,至少会有一些意义(函数(根){var SOMEVAR;…})(this);.然后会受到任何约束在调用代码中引用。 评论 2015年5月7日17:04
0

您定义了一个匿名函数,然后立即用参数。

如果你只是想了解,然后参考其他问题。

0

啊,什么是。javascript书中最古老的问题。一般来说,指当前代码正在其中执行的上下文。如果在脚本标记中直接运行“顶级”代码,则指窗口。在点击事件中?当前元素。在构造函数中?将构造的对象。你甚至可以通过打电话和申请来做任何你想做的事情。

0

如果您看到此构造:

(函数(ns){})(this);

不在其他函数内是脚本执行的默认命名空间的引用。在浏览器中,默认名称空间的名称非常奇怪窗口因此,将输出以下内容真的:

(函数(ns){console.log(ns===窗口);})(本);

例如,当您需要检查名称空间中是否存在变量时,这样的ns(名称空间)变量非常有用。例如:

警报(foo);

将出现错误“undefined variable foo”,但这:

(函数(ns){警报(ns.foo);})(本);

将显示带有单词“undefined”的警告。

另一种用法是在模块中,这些模块可以像在node.js等中一样在浏览器中工作。Node.js没有窗口因此,上面的构造是获得默认名称空间/范围对象引用的唯一可靠方法。

不是你想要的答案吗?浏览已标记的其他问题问你自己的问题.