这是一系列关于JavaScript中语法的问题.这也是社区Wiki,因此邀请每个人参与维护此列表.
Stack Overflow不允许搜索特定字符.因此,在搜索运算符和其他语法标记时,很难找到许多关于运算符和其他语法标记的问题.这也使得关闭重复更加困难.以下列表是为了解决此问题.
主要思想是在Stack Overflow上链接现有问题,因此我们更容易引用它们,而不是复制ECMAScript规范中的内容.
此外,这是PHP符号引用的公然副本.我们需要一个JS.
请帮忙.编辑并添加指向其他运算符/语法参考的链接,或者如果您无法在特定语法上找到好的问题/答案,请添加此问题的答案并将其链接
我想使用这种模式是新的热点,但我不明白它的优点是什么,我不理解范围的含义.
模式:
(function(window, document, undefined){
window.MyObject = {
methodA: function() { ... },
methodB: function() { ... }
};
})(window, document)
Run Code Online (Sandbox Code Playgroud)
所以我对此有几个问题.
封装像这样的对象有什么特别的优势吗?
为什么窗口和文档被输入而不是正常访问?
为什么undefined要传递这个?
将我们正在创建的对象直接附加到窗口是一个特别好的主意吗?
我已经习惯了我称之为Crockford风格的Javascript封装(因为我把它从Douglas Crockford Javascript视频中删除了).
NameSpace.MyObject = function() {
// Private methods
// These methods are available in the closure
// but are not exposed outside the object we'll be returning.
var methodA = function() { ... };
// Public methods
// We return an object that uses our private …Run Code Online (Sandbox Code Playgroud) 我最近一直在研究一些JS库,这些库是由真正了解他们正在做什么的人编写的,我一直看到这种模式,而且我找不到有关它的信息.我阅读了.call()方法的文档,但它对我来说并没有多大意义.我希望通过实例获得其中一个经典的深入SO解释.
(function(undefined){
/*(insert entire library here)*/
}).call(this);
Run Code Online (Sandbox Code Playgroud)
这是关于什么的?为什么这是编写库的好方法?
请注意,有时undefined会省略,但我不知道将它放在那里有什么不同.我甚至不知道论据的来源,或者来电者是谁.
;(function ($, window, document, undefined) {
//code
}(jQuery, this, this.document));
Run Code Online (Sandbox Code Playgroud)
这是我第一次看到这样的东西.它是什么以及如何解释?我不明白为什么它必须传递this和this.document,以及'undefined'是什么.
我问的原因是因为我把它包含在我的页面中
if($('ul.mtree').length)
Run Code Online (Sandbox Code Playgroud)
返回false,尽管它在控制台中输入时返回true.
(function ($, undefined) {
. . .
})(jQuery);
Run Code Online (Sandbox Code Playgroud)
我到处都看到了这一点,但我不明白为什么我们将jQuery作为参数发送到自包含的函数中.jQuery已被引用.另外,为什么我们定义undefined为参数?
(function($, window, undefined){
... jquery code...
})(jQuery, window);
Run Code Online (Sandbox Code Playgroud)
它到底意味着什么?这也意味着$(document).ready()什么?或者只是两件不同的事情?
我理解如何定义这样的函数:
function myfunc(x,y,z) {
alert("Just an example " + x + y + z)
}
Run Code Online (Sandbox Code Playgroud)
但不是这个:
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.min.js"></script>
<script>
(function ($) {
$.fn.idle = function (x, y, z) {
alert("Just an example " + x + y + z)
}(jQuery));
</script>
Run Code Online (Sandbox Code Playgroud)
以上是我正在使用的库的一部分,但我根本无法理解这$.fn.idle一点.
它在做什么?它以某种方式定义了一个名为'idle'的函数,但是$.fn呢?那(function ($) {部分怎么样?我再次明白,$(document).ready(function() {但(function ($) {完全是外星人.这是一个简短的手吗?
(jQuery));底部有什么意义?
我们看到这种方法一直在使用:
(function (window) {
var document = window.document,
location = window.location,
navigator = window.navigator;
})(window)
Run Code Online (Sandbox Code Playgroud)
在研究上面的代码片段时,我想知道为什么像全局可访问的对象window作为参数传递给函数.可能是这样的:
你怎么看?
我已经使用Java很长一段时间了,很长一段时间我一直在使用GWT(Google Web Toolkit)进行Web开发.它的美妙之处在于我拥有了面向Java对象的构造,并且不会担心它如何被转换为GWT - 让Google来处理它.我对Javascript的了解已经足够,但并不是因为我可以用它进行大量的Web开发.后来我决定我必须对Javascript有更深入和更彻底的了解,这是一个真正的过山车 - 只是在我认为我得到了一些东西,有些东西来证明我错了 - 我只是被误解了.
有什么比stackoverflow更能表达我的关注的地方:我正在寻找一些资源和指向什么是Javascript等同于以下一些Java概念:
Class
instance of a class - object
Member variables
Getters
Setters
Abstract Class
Interface
Inheritance
Access Modifiers
Constructors
Run Code Online (Sandbox Code Playgroud)
我知道其中一些概念,但正如我所说 - 我相信我有一些概念上的困难.如果有人可以指出一个真正的javascript大师试图在这里查明这些概念,我将非常高兴.
可能的重复:
这个JavaScript/JQuery语法如何工作:( function(window,undefined){})(window)?
使用(函数(窗口,文档,未定义){...})(窗口,文档)赋予什么优势?
我见过很多javascript库创建一个名为"undefined"的变量,iam无法弄清楚它的用途,下面是从jQuery库复制的行
* Date: Wed Feb 23 13:55:29 2011 -0500
*/
(function( window, undefined ) {
// Use the correct document accordingly with window argument (sandbox)
var document = window.document;
var jQuery = (function() {
Run Code Online (Sandbox Code Playgroud)
请告诉我这样做的原因和好处!!