我最近开始维护其他人的JavaScript代码.我正在修复错误,添加功能,并尝试整理代码并使其更加一致.
以前的开发人员使用两种声明函数的方法,如果背后有原因,我就无法解决.
这两种方式是:
var functionOne = function() {
// Some code
};
Run Code Online (Sandbox Code Playgroud)
function functionTwo() {
// Some code
}
Run Code Online (Sandbox Code Playgroud)
使用这两种不同方法的原因是什么?每种方法的优缺点是什么?有一种方法可以通过一种方法完成,而另一种方法无法完成吗?
!function () {}();
Run Code Online (Sandbox Code Playgroud) 我一直在寻找关于自我调用函数的信息,在某个地方我偶然发现了这个符号:
+function(){}
Run Code Online (Sandbox Code Playgroud)
有人可以向我解释一下+这个功能前面的符号意味着什么?
我最近一直在阅读很多Javascript,并且我注意到要导入的.js文件中的整个文件包含如下所示.
(function() {
...
code
...
})();
Run Code Online (Sandbox Code Playgroud)
这样做的原因是什么,而不是一组简单的构造函数?
在JavaScript中实现单例模式的最简单/最简洁的方法是什么?
我写了下面的脚本,只是为了看一个变量和一个分配了函数的函数的名字发生冲突时会发生什么:
var f = function() {
console.log("Me original.");
}
function f() {
console.log("Me duplicate.");
}
f();
Run Code Online (Sandbox Code Playgroud)
我得到的输出是"我原创".为什么没有调用其他函数?
另外,如果我将原来的作业改为var f = new function() {,我会得到"我原创",然后是TypeError说object is not a function.有人可以解释一下吗?
我刚刚阅读了一篇关于Ben Cherry的JavaScript范围和提升的精彩文章,其中他给出了以下示例:
var a = 1;
function b() {
a = 10;
return;
function a() {}
}
b();
alert(a);
Run Code Online (Sandbox Code Playgroud)
使用上面的代码,浏览器将发出"1"警报.
我仍然不确定它为什么会返回"1".他说的一些事情就像是:所有的功能声明都被提升到顶部.您可以使用函数来调整变量的范围.仍然没有为我点击.
为什么这些例子中的第一个不起作用,但所有其他例子都不起作用?
// 1 - does not work
(function() {
setTimeout(someFunction1, 10);
var someFunction1 = function() { alert('here1'); };
})();
// 2
(function() {
setTimeout(someFunction2, 10);
function someFunction2() { alert('here2'); }
})();
// 3
(function() {
setTimeout(function() { someFunction3(); }, 10);
var someFunction3 = function() { alert('here3'); };
})();
// 4
(function() {
setTimeout(function() { someFunction4(); }, 10);
function someFunction4() { alert('here4'); }
})();
Run Code Online (Sandbox Code Playgroud) 我厌倦了在Javascript中看到几十种不同的面向对象编程方式.任何人都可以告诉我应该使用哪种技术考虑我想要在大型项目上工作,我希望我的代码能够成为未来的证据吗?
我想提供辅助函数,允许复杂的基于jQuery的UI的各种组件隐藏或显示加载div(在从页面的各个部分启动Ajax调用时使用).
为此,我最初编写了这样的代码:
<script type="text/javascript">
$(function ()
{
var loadingControl = $("#loading");
function showLoading() {
loadingControl.show();
}
}
</script>
Run Code Online (Sandbox Code Playgroud)
但是,我很快意识到showLoading仅在该特定文档中的范围内准备好.
遵循建议
我在全局范围内声明了showLoading,如下所示:
<script type="text/javascript">
var showLoading;
$(function ()
{
var loadingControl = $("#loading");
function showLoading() {
loadingControl.show();
}
}
</script>
Run Code Online (Sandbox Code Playgroud)
但是,我仍然发现showLoading在稍后执行的文档就绪块中不可用.错误是
属性"showLoading"的值为null或undefined,而不是Function对象
这种行为可以在这里看到:
jsFiddle还证明showLoading实现的文档就可以在调用它的文档就绪块之前运行.
出了什么问题,我怎样才能使这个辅助方法可用?
我在文档就绪块中定义它,因为它依赖于'#loading'可用.是否有更好的方法来实现提供辅助功能来隐藏/显示加载屏幕的相同目标?我想将它保存在辅助函数中,因为实现可能会在以后更改.
我有一个'初学者'的问题.为什么会出错?我在代码中调用该函数,但该函数被进一步定义.
AngularJS版本:
var myApp = angular.module('myApp',[]);
function MyCtrl($scope) {
$scope.name = 'Someone';
$scope.doStuff(); // run the defined function, but errors out
$scope.doStuff= function(){ // function definition
console.log('did something');
}
}
Run Code Online (Sandbox Code Playgroud)
但这个工作正常:
var myApp = angular.module('myApp',[]);
function MyCtrl($scope) {
$scope.name = 'Someone';
$scope.doStuff = function(){
console.log('did something');
}
$scope.doStuff();
}
Run Code Online (Sandbox Code Playgroud)