我找不到任何可访问的示例,显示两个(或更多)不同模块如何连接在一起工作.
所以,我想问一下是否有人有时间编写一个解释模块如何协同工作的例子.
在JavaScript中声明本地(内部)函数时,有两个选项:
使用var关键字声明,分配给变量:
(function() {
var innerFunction1 = function() { ... };
innerFunction1();
}());
Run Code Online (Sandbox Code Playgroud)
仅使用function关键字声明,而不指定给变量:
(function() {
function innerFunction2() { ... };
innerFunction2();
}());
Run Code Online (Sandbox Code Playgroud)
我可以看到第二个的一个优点:函数可以在调用它的代码下面声明,因此更容易将私有函数与实际执行的代码分开.
哪个更好,为什么?
我之前问了这个问题,在仔细考虑了这个话题之后,我开始想知道"陈述"和"表达"这两个词之间看似模糊的界限在哪里.所有陈述都是表达式吗?REPL控制台中的返回值来自哪里?它们似乎并不总是具有直观意义.当然,如果你输入1+1,你会得到2,但有时候它的逻辑并不明显.
鉴于在REPL中输入的任何内容都会产生一些价值,这是否意味着它可以在JS源代码中用作表达式和独立语句?
可以_X_在以下代码段中使用的代码串也可用于_Y_反之亦然?if(_X_) _Y_
在PHP中,我们有一个简洁的use关键字,允许在使用闭包时使用"外部"变量,如下所示:
$tax = 10;
$totalPrice = function ($quantity, $price) use ($tax){ //mandatory 'use'
return ($price * $quantity) * ($tax + 1.0);
};
Run Code Online (Sandbox Code Playgroud)
如果我们省略该use ($tax)部分,它将抛出一个错误,我非常喜欢.
类似地,在C++ 11中,我们也这样做,使用括号指定称为捕获列表的外部变量:
float tax = 10;
auto totalPrice = [tax](int quantity, float price){ //mandatory []
return (price*quantity) * (tax + 1.0);
};
Run Code Online (Sandbox Code Playgroud)
与在php中一样,如果省略捕获列表,则会抛出错误.
在Javascript中,我们没有等效于此use关键字(或c ++ []),我们只是这样做:
var tax = 10;
var totalPrice = function (quantity, price){ //no need for 'use' or similar
return (price * quantity) * (tax …Run Code Online (Sandbox Code Playgroud) 我正在研究List.js框架.这是一个起始代码.如果我删除它(甚至删除功能e)的周围"()",代码不起作用.
这是什么?我认为它已经在Javascript方法中定义了.
(function e(t,n,r){
function s(o,u){
if(!n[o]){
if(!t[o]){
var a=typeof require=="function"&&require;
if(!u&&a) return a(o,!0);
if(i)return i(o,!0);
var f=new Error("Cannot find module '"+o+"'");
throw f.code="MODULE_NOT_FOUND",f
}
var l=n[o]={exports:{}};
t[o][0].call(l.exports,function(e){
var n=t[o][1][e];
return s(n?n:e)
},l,l.exports,e,t,n,r)
}
return n[o].exports
}
var i=typeof require=="function"&&require;
for(var o=0;o<r.length;o++)
s(r[o]);
return s
}
)
Run Code Online (Sandbox Code Playgroud) 可能重复:
将整个Javascript文件包装在像"(function(){ … })()" 这样的匿名函数中的目的是什么?
大家好,
我看过几个使用这种表示法的JavaScript文件:
JavaScript文件的开头:
(function() {
// All functions go here.
// Can someone say what the wrapping nameless function is used for?
})();
Run Code Online (Sandbox Code Playgroud)
还有原型库,这似乎是可能的:
function $() {
// Prototype $-wrapping function.
}
Run Code Online (Sandbox Code Playgroud)
有人可以解释上面两个代码片段,它们的用途和它们的区别吗?一些关键字可以帮助我找到更多关于这种符号/技术(如何命名)也会有帮助,所以我可以在它上面运行谷歌搜索... :)
谢谢!
可能的重复:
将整个 Javascript 文件包装在像“(function(){ ... })()”这样的匿名函数中的目的是什么?
我遇到了一个 JS 文件,可以总结为下面的代码:
(function(window){
// some codes here
})(window);
Run Code Online (Sandbox Code Playgroud)
我想知道这段代码是什么意思?窗口有什么特殊含义,还是只是一个参数?我们在括号中看到的两个“窗口”有什么区别?
由于这个函数没有名字,我假设它是一个匿名函数,那么它是否只被调用一次?什么时候调用?
问题:为什么在匿名函数中包装我的JavaScript库会修复我的竞争条件?
注意:我也对同步和异步加载外部JavaScript资源的良好解决方案的评论感兴趣.
我正在开发一个涉及使用crossrider编写浏览器扩展的项目.如果您不熟悉跨骑手扩展,他们是用JavaScript实现的,那么您有一个可以与应用页面通信的后台页面.应用页面可以与每个打开的选项卡一起运行,并可以操作DOM.我计划在用户请求打开时远程加载大部分扩展代码.最近,当我向引用Raphael的页面添加脚本标签时,我遇到了竞争状态,然后我用graffle构建了一些东西
根据我的理解,如果页面加载了那些已经存在的脚本标签,那么执行将同步进行,但是因为我附加了脚本标签,所以执行是异步进行的.这是大多数人似乎面临的相反问题.搞乱它我学会了在匿名函数中包装我的代码graffle代码修复了我的竞争条件.为什么?我读过这篇关于在匿名函数中包装整个Javascript文件的帖子,这似乎与竞争条件没有任何关系.
我的通话代码:
var scriptsToLoad = [ "http://example/Scripts/lib/raphael.js",
"http://example/Scripts/lib/graffle.js",
"http://example/Scripts/lib/log4javascript.js"];
for(var i in scriptsToLoad) {
(function(){
$("head")
.append($("<script></script>")
.attr("type", "text/javascript")
.attr("src", scriptsToLoad[i]));
})()
}
Run Code Online (Sandbox Code Playgroud) 我已经看到了以下两种方式实现的各种代码.我总是使用第二个(2.).我想在这里知道两件事.
这两个代码有什么区别吗?
哪一个是最佳实践(以及为什么)?
1.
(function () {
//some code here, angular code
})();
Run Code Online (Sandbox Code Playgroud)
2.
(function () {
//some code here, angular code
});
Run Code Online (Sandbox Code Playgroud)
我还想在这方面建议一些好的博客或书籍,因为我想更详细地学习.谢谢大家提前..
如果我将脚本包装为匿名样式函数,例如“在Coffeescript中编译”是否适合操作DOM?
(function() {
this.detect = function(){
window.alert( "message" );
};
}).call(this);
Run Code Online (Sandbox Code Playgroud) 我在 NodeJS 上有这个模块:
const { cloneDeep, mapValues } = require('lodash');
module.exports = function(Sequelize) {
return new ( function(Sequelize) {
/* Preserve this pointer into forEach callbacks scope */
var self = this;
this.types = {
'string' : Sequelize.STRING,
'text' : Sequelize.TEXT,
'integer' : Sequelize.INTEGER,
'int' : Sequelize.INTEGER,
'decimal' : Sequelize.DECIMAL,
'date' : Sequelize.DATE,
'boolean' : Sequelize.BOOLEAN,
};
/* Convert the Agence model Syntax to Sequelize syntax */
this.parse = function(model) {
/* Convert model Agence attributes to Sequelize types attribs …Run Code Online (Sandbox Code Playgroud) 我理解表达式在执行上下文到达之前不会"存在".我只是想知道是否有任何区域使用函数表达式比普通函数语句更好,您不必担心函数何时会被保存到内存中.
我完全了解它们如何在差异中工作,我只是对表达的用途感到好奇.
javascript ×12
function ×3
closures ×2
angularjs ×1
asynchronous ×1
c++11 ×1
declaration ×1
expression ×1
minify ×1
module ×1
node.js ×1
parentheses ×1
php ×1
prototypejs ×1
semantics ×1
sequelize.js ×1
terminology ×1
typescript ×1