我最近将当前版本的json2.js与我在项目中的版本进行了比较,并注意到函数表达式的创建和自我执行方式有所不同.
用于在括号中包装匿名函数然后执行它的代码,
(function () {
// code here
})();
Run Code Online (Sandbox Code Playgroud)
但现在它将自动执行的函数包含在括号中.
(function () {
// code here
}());
Run Code Online (Sandbox Code Playgroud)
有通过CMS在接受答案的注释解释JavaScript的封装匿名函数的语法是"既:(function(){})();和(function(){}());有效."
我想知道有什么区别?前者是否通过绕过全局匿名函数来占用内存?括号应该放在哪里?
当您将JavaScript代码包装在这样的函数中时:
(function(){
var field = ...;
function doSomthing(){...
...
})();
Run Code Online (Sandbox Code Playgroud)
我注意到这在很多网页上为我修复了范围问题.这种做法叫做什么?
我正在尝试在onclick事件中传递一个参数.以下是示例代码:
<div id="div"></div>
<script language="javascript" type="text/javascript">
var div = document.getElementById('div');
for (var i = 0; i < 10; i++) {
var link = document.createElement('a');
link.setAttribute('href', '#');
link.innerHTML = i + '';
link.onclick= function() { onClickLink(i+'');};
div.appendChild(link);
div.appendChild(document.createElement('BR'));
}
function onClickLink(text) {
alert('Link ' + text + ' clicked');
return false;
}
</script>
Run Code Online (Sandbox Code Playgroud)
但是,每当我点击任何链接时,警报总会显示"Link 10 clicked"!
谁能告诉我我做错了什么?
谢谢
可能重复:
"(function(){})()"和"(function(){}())"在JavaScript中功能相同吗?
这是我还没有想到的东西,但是我一直在使用function(){}(),因为我添加了括号后我的VIM语法突出显示,虽然我已经看过(function(){}) ()很多次,也许它是一个IE的东西?
编辑:
var singleton = function() {
// code
}();
var singleton = (function() {
// code
})();
Run Code Online (Sandbox Code Playgroud) 我正在尝试配置我的Gruntfile以将我的所有Jade文件编译为单独的HTML文件.例如,如果我有以下源文件夹:
source
??? templates
??? first.jade
??? second.jade
??? third.jade
Run Code Online (Sandbox Code Playgroud)
然后我希望grunt jade输出:
build
??? templates
??? first.html
??? second.html
??? third.html
Run Code Online (Sandbox Code Playgroud)
这是我的Gruntfile使用grunt-contrib-jade:
module.exports = function(grunt) {
grunt.initConfig({
jade: {
compile: {
options: {
client: false,
pretty: true
},
files: [ {
src: "*.jade",
dest: "build/templates/",
ext: "html",
cwd: "source/templates/"
} ]
}
},
});
grunt.loadNpmTasks("grunt-contrib-jade");
};
Run Code Online (Sandbox Code Playgroud)
但是,当我运行jade命令时,我收到以下错误:
Running "jade:compile" (jade) task
>> Source file "first.jade" not found.
>> Source file "second.jade" not found.
>> Source file …Run Code Online (Sandbox Code Playgroud) 我经常看到两种惯例,我想知道是否存在实际差异.
(function () {
document.write("it works");
}());
(function () {
document.write("it also works");
})();
Run Code Online (Sandbox Code Playgroud) 有没有办法防止或使其难以让某人注入Javascript并操纵变量或访问函数?我的想法是在每次重新加载时随机更改所有var名称,以便每次都需要重写恶意软件脚本?还是有其他不那么痛苦的方法?
我知道最终有人会破解他的方式,但我想知道如何使重现行动变得困难,以便人们不会发布书签或类似的东西供所有人使用.我不在乎专家是否在代码中找到了自己的方式,但我希望它比它复杂一点javascript:d=0;
如果你知道如何使黑客攻击Javascript更困难,请写下这些.
this.remove()不是函数.怎么会?
var vehicle = function () {
return {
init: function () {
jQuery('.vehicle-year-profile .options .delete').bind('click', function (e) {
e.preventDefault();
this.remove();
});
},
remove: function () {
alert('test');
}
}
}();
jQuery().ready(vehicle.init);
Run Code Online (Sandbox Code Playgroud)
对困惑感到抱歉.我正在尝试调用自己的"删除"功能.这只是一个管理我页面上的车辆的类.这是它的开始,它将具有比init/remove更多的功能.
任何人都可以解释为什么这样有效:
var sayHello = function (name) {
alert("Hello there " + name + "!");
}("Mike");
Run Code Online (Sandbox Code Playgroud)
虽然这不是:
function sayHello (name) {
alert("Hello there " + name + "!");
}("Mike");
Run Code Online (Sandbox Code Playgroud)
迈克皮特
Google Analytics跟踪代码如下所示:
(function() {
code
})();
Run Code Online (Sandbox Code Playgroud)
他们使用这些括号的技术是什么(stuff)()- 被称为?它有什么作用?
我将Google Analytics代码放在我页面上的结束标记之前,然后像这样放置一个if语句(我进一步包含了一个Jquery cookie插件):
<script type="application/javascript">
if ($.cookie('allowcookies') == 'yes') {
analytics code
}
</script>
Run Code Online (Sandbox Code Playgroud)
直到我在代码中使用相同的技术,它才运行:
(function() {if ($.cookie('allowcookies') == 'yes') {
analytics code
}
})();
Run Code Online (Sandbox Code Playgroud)
为什么在我这样做之前没有运行?它为什么要追赶?
我一直在使用文档准备,但我正在观看一些教程视频真的知道最新情况,而不仅仅是通过输入这么多知道.
我总是把它放在一个习惯的匿名函数中,因为它总是如此完成,但现在我看到它是否在匿名函数中(alert();例如),它会在DOM加载时执行NOT但是当javascript时立即执行NOT负载.它必须在一个匿名函数中才能实现它应该如何(当整个页面加载时)和事件监听器触发它的'ready'.
为什么是这样?
此外,我经常看到类似函数(i){}(i)的东西,这是什么意思?
javascript ×11
jquery ×2
syntax ×2
browser ×1
closures ×1
function ×1
gruntjs ×1
iife ×1
invocation ×1
malware ×1
node.js ×1
security ×1
terminology ×1