相关疑难解决方法(0)

var functionName = function(){} vs function functionName(){}

我最近开始维护其他人的JavaScript代码.我正在修复错误,添加功能,并尝试整理代码并使其更加一致.

以前的开发人员使用两种声明函数的方法,如果背后有原因,我就无法解决.

这两种方式是:

var functionOne = function() {
    // Some code
};
Run Code Online (Sandbox Code Playgroud)
function functionTwo() {
    // Some code
}
Run Code Online (Sandbox Code Playgroud)

使用这两种不同方法的原因是什么?每种方法的优缺点是什么?有一种方法可以通过一种方法完成,而另一种方法无法完成吗?

javascript syntax idioms function

6645
推荐指数
32
解决办法
98万
查看次数

为什么需要在同一行上调用匿名函数?

我正在阅读一些关于闭包的帖子,到处都看到了这个,但是没有明确的解释它是如何工作的 - 每次我被告知要使用它......:

// Create a new anonymous function, to use as a wrapper
(function(){
    // The variable that would, normally, be global
    var msg = "Thanks for visiting!";

    // Binding a new function to a global object
    window.onunload = function(){
        // Which uses the 'hidden' variable
        alert( msg );
    };
// Close off the anonymous function and execute it
})();
Run Code Online (Sandbox Code Playgroud)

好的,我看到我们将创建新的匿名函数,然后执行它.所以在那之后这个简单的代码应该工作(并且确实如此):

(function (msg){alert(msg)})('SO');
Run Code Online (Sandbox Code Playgroud)

我的问题是这里发生了什么样的魔术?当我写作时我想:

(function (msg){alert(msg)})
Run Code Online (Sandbox Code Playgroud)

然后会创建一个新的未命名函数,如函数""(msg)...

但那么为什么这不起作用?

(function (msg){alert(msg)});
('SO');
Run Code Online (Sandbox Code Playgroud)

为什么它需要在同一行?

你能指点一些帖子或给我解释一下吗?

javascript anonymous-function iife

372
推荐指数
8
解决办法
29万
查看次数

单页JavaScript Web应用程序的体系结构?

如何在客户端构建复杂的单页JS Web应用程序?具体来说,我很好奇如何根据模型对象,UI组件,任何控制器和处理服务器持久性的对象来干净地构建应用程序.

MVC起初似乎很合适.但是,如果UI组件嵌套在不同的深度(每个组件都有自己的方式对模型数据进行操作/对模型数据作出反应,并且每个生成事件本身可能会或可能不会直接处理),看起来MVC似乎不能干净利用.(但如果情况并非如此,请纠正我.)

-

(这个问题产生了两个使用ajax的建议,除了最简单的单页应用程序之外,其他任何东西显然都需要.)

javascript architecture design-patterns web-applications singlepage

99
推荐指数
4
解决办法
5万
查看次数

"var FOO = FOO || {}"(将变量或空对象分配给该变量)在Javascript中意味着什么?

看一下在线源代码,我在几个源文件的顶部看到了这个.

var FOO = FOO || {};
FOO.Bar = …;
Run Code Online (Sandbox Code Playgroud)

但我不知道是什么|| {}.

我知道{}是等于new Object(),我认为这||是为了"如果它已经存在使用其值,否则使用新对象.

为什么我会在源文件的顶部看到这个?

javascript namespaces variable-declaration or-operator

94
推荐指数
4
解决办法
2万
查看次数

这种定义JS对象的方式有什么用途吗?

我正在维护一些遗留代码,我注意到使用了以下用于定义对象的模式:

var MyObject = {};

(function (root) {

    root.myFunction = function (foo) {
        //do something
    };

})(MyObject);
Run Code Online (Sandbox Code Playgroud)

这有什么用途吗?它只相当于做以下事情吗?

var MyObject = {

    myFunction : function (foo) {
        //do something
    };

};
Run Code Online (Sandbox Code Playgroud)

我不打算采用神圣的方式将整个代码库重构为我的喜好,但我真的很想了解定义对象的迂回方式背后的原因.

谢谢!

javascript javascript-objects

87
推荐指数
6
解决办法
3167
查看次数

将JavaScript命名空间拆分为多个文件

假设我有一个这样的命名空间:

var myNamespace = {
    foo: function() {
    },
    bar: function() {
    }
};
Run Code Online (Sandbox Code Playgroud)

将此代码拆分为定义foobar单独的文件的最佳方法是什么?

我并不担心加载时间 - 我会在部署之前将其连接回一个文件.

javascript namespaces code-organization

41
推荐指数
3
解决办法
9139
查看次数

JavaScript命名空间声明

我创建了一个javascript类如下:

var MyClass = (function() {
   function myprivate(param) {
      console.log(param);
   }

   return {
      MyPublic : function(param) {
         myprivate(param);
      }
   };
})();

MyClass.MyPublic("hello");
Run Code Online (Sandbox Code Playgroud)

上面的代码是有效的,但我的问题是,如果我想将命名空间引入该类.

基本上我希望能够像这样调用类:

Namespace.MyClass.MyPublic("Hello World");
Run Code Online (Sandbox Code Playgroud)

如果我添加了Namespace.MyClass,它将抛出错误"语法错误".我确实尝试添加"window.Namespace = {}",但它也不起作用.

谢谢.. :)

javascript

30
推荐指数
2
解决办法
1万
查看次数

在Javascript中使用对象和函数进行命名空间有什么区别?

我在JavaScript中看到了这两种基本的命名空间方式.

  1. 使用对象:

    var Namespace = { };

    Namespace.Class1 = function() { ... };

  2. 使用功能:

    function Namespace() { };

    Namespace.Class1 = function() { ... };

他们有什么不同?谢谢.

javascript

24
推荐指数
2
解决办法
1万
查看次数

如何隔离我的javascript代码以防止冲突?

我一直在写很多javascript函数和事件监听器,我想将它们移动到它们自己的命名空间,隔离的地方,当我连接并用我的其他javascript文件缩小它时不会发生冲突.

我还是javascript的新手,所以这个答案可能有简单的解决方案.我开始创建一个javascript对象:

var MySpecialStuff = {
    init: function(){
        //do everything here
    }
};
Run Code Online (Sandbox Code Playgroud)

然后在我的html中,在我想要使用它的页面上,我可以初始化这段代码:

<script>
    MySpecialStuff.init();
</script>
Run Code Online (Sandbox Code Playgroud)

但随后该init方法开始增长,我需要开始将代码分解为更小的块,但我仍然坚持语法以及如何设置私有方法/变量并从init方法和其他私有方法中调用它们.我怎样才能做到这一点?

我是朝着正确的方向前进的吗?我/我应该采取哪些其他方式来做这类事情?

javascript

15
推荐指数
1
解决办法
7871
查看次数

定义函数的最佳方法是什么?

我总是学会在JavaScript中定义一个函数,如下所示:

function myFunction(arg1, arg2) { ... }
Run Code Online (Sandbox Code Playgroud)

但是,我刚刚阅读了谷歌的Javascript指南,它提到我应该定义这样的方法:

Foo.prototype.bar = function() { ... };
Run Code Online (Sandbox Code Playgroud)

问题:示例中的"Foo"是Object,还是名称空间?为什么Google示例不是以下代码(不起作用):

prototype.bar = function() { ... };
Run Code Online (Sandbox Code Playgroud)

更新:如果它有助于了解,我的所有JavaScript都将由用户浏览器调用我的Web应用程序.

javascript web-applications

13
推荐指数
4
解决办法
1万
查看次数