如何在JavaScript中创建命名空间,以便我的对象和函数不会被其他同名的对象和函数覆盖?我用过以下内容:
if (Foo == null || typeof(Foo) != "object") { var Foo = new Object();}
Run Code Online (Sandbox Code Playgroud)
这样做有更优雅或简洁的方式吗?
我是JavaScript和YUI的新手.在YUI库示例中,您可以找到此构造的许多用法:
(function() {
var Dom = YAHOO.util.Dom,
Event = YAHOO.util.Event,
layout = null,
...
})();
Run Code Online (Sandbox Code Playgroud)
我认为最后几个括号是在声明之后执行该函数.
...但是围绕函数声明的前一组括号怎么样?
我认为这是一个范围问题; 这是将内部变量隐藏到外部函数和可能的全局对象中.是吗?更一般地说,这些括号的机制是什么?
为什么这个:
(function () {
//code
}());
Run Code Online (Sandbox Code Playgroud)
还有这个:
var f = function () {
//code
}();
Run Code Online (Sandbox Code Playgroud)
工作,而这:
function () {
//code
}();
Run Code Online (Sandbox Code Playgroud)
才不是?它看起来完全一样 - 定义了匿名函数,并立即调用.有人可以从JavaScript/ECMAScript标准中引用它来解释这个吗?
更新:感谢大家的答案!所以这是关于函数表达式与函数声明的关系.请参阅此Stack Overflow答案,ECMAScript标准第13节,以及这篇精彩文章:命名函数表达式揭秘.
回顾一下答案:
第一个片段被解释为表达式,因为应用了分组运算符()- 请参阅ECMAScript标准第11.1.6节.
在第二个片段中,函数被解释为表达式,因为它位于赋值运算符的右侧部分=.
第三个片段没有任何允许解释器将函数作为表达式读取的东西,因此它被认为是一个声明,如果没有标识符则无效(Gecko允许它通过,但它会跟随下面的()分组操作符(因为它认为) )什么都不适用).
可能重复:
JavaScript:var functionName = function(){} vs function functionName(){}
在JavaScript中声明函数
我已经看到了两种不同的语法来定义javascript中的函数:
function f() {
...
}
Run Code Online (Sandbox Code Playgroud)
以及
var f = function() {
...
};
Run Code Online (Sandbox Code Playgroud)
这些有什么区别?其中一个被弃用了吗?
如何在JavaScript中创建无限循环?我正在尝试制作幻灯片,我已经开始工作了,但我无法让它循环播放.我甚至无法让它循环两次.
我现在使用的代码是
window.onload = function start() {
slide();
}
function slide() {
var num = 0;
for (num=0;num<=10;num++) {
setTimeout("document.getElementById('container').style.marginLeft='-600px'",3000);
setTimeout("document.getElementById('container').style.marginLeft='-1200px'",6000);
setTimeout("document.getElementById('container').style.marginLeft='-1800px'",9000);
setTimeout("document.getElementById('container').style.marginLeft='0px'",12000);
}
}
Run Code Online (Sandbox Code Playgroud)
没有那里的东西,它确实经历了一次.当我输入一个for时,它要么让Firefox锁定,要么只循环一次.我确信这是一件非常简单的事情,即使它必须循环1,000,000次而不是无限次,这对我来说还算合适.
另外,我不想使用jQuery或其他人创建的东西.我正在学习JavaScript,这部分是为了帮助我学习,部分是因为我正在努力制作尽可能多的基于HTML5的系统.
编辑:我认为它冻结的原因是因为它一次执行代码,然后只是将它存储在缓存或其他东西.我想要它做的就是经历一次,然后再次从顶部开始,这是我一直认为循环的地方.在"批处理"(命令提示符)脚本中,可以使用" GOTO"命令完成.我不知道JS中是否有相同的东西,但这确实是我的目标.
1.
function abc(){
alert("named function");
}
Run Code Online (Sandbox Code Playgroud)
V/S
2.
function(){
alert("Un-Named function");
}
Run Code Online (Sandbox Code Playgroud)
请从初学者的角度来解释一下.
var ninja = (function(){
function Ninja(){};
return new Ninja();
})();
Run Code Online (Sandbox Code Playgroud)
为什么上面的函数封装在括号中,为什么();最后有?
我认为这是一个构造函数,因为();最后,但为什么对象包含在括号中?
可能重复:
JavaScript:var functionName = function(){} vs function functionName(){}
Javascript中的函数表达式与声明有什么区别?
我知道函数声明和表达式之间的区别,但是遇到了涉及函数名称的代码,并且想要了解运行它时会发生什么:
var abc = function def() {
console.log("Wait! What??");
}
Run Code Online (Sandbox Code Playgroud)
我知道这不是JavaScript的一种方式,但只是想知道一些事情:
abc?为什么会这样?abc可以叫但不是def,为什么?def是undefined- 为什么?如果它应该是,是否有内存泄漏?abc.prototype功能def?谢谢
简单,为什么一些js文件(如Ember或JQuery.js)开头(function() {...})();?
我正在修改一些有很多jQuery的代码,但我不确定某些jQuery语句在做什么.
在jQuery代码的顶部有
jQuery.noConflict
Run Code Online (Sandbox Code Playgroud)
*1.我明白那个.但是有一些代码有:
<script type="text/javascript">
(function($) {
$(document).ready(function() {
jQuery.fn.fixEmail = function() {
{
return $(this).each(function() {
var $s = $(this);
...code...
}
}
</script>
Run Code Online (Sandbox Code Playgroud)
我得到jQuery被使用因为noConflict.什么是参数$?
*2.在另一个功能中,他们使用
<script type="text/javascript">
jQuery(function(){
var $ = jQuery;
var cc = {
mode : 'teaser',
featureVisible : true,
$loader : '<p class="loadingAnimation"><img height="32" src="' +
config.xoImgUrl +
'/images/ajax-loader.gif" width="32" /></p>',
....more code...
}
}
</script>
Run Code Online (Sandbox Code Playgroud)
所以他们从noConflict设置$ jQuery.但为什么?他们刚刚使用过jQuery吗?
*3.我想要使用的插件由以下内容初始化:
var $j = jQuery.noConflict();
var $ = {};
$j(document).ready(function(){
$j.history.init(pageload);
$j("a[@rel='history']").click(function(){
...more code...
});
}); …Run Code Online (Sandbox Code Playgroud)