您如何向知道其所包含概念的人(例如函数,变量等)解释JavaScript闭包,但不了解闭包本身?
我已经看过维基百科上给出的Scheme示例,但遗憾的是它并没有帮助.
我最近开始维护其他人的JavaScript代码.我正在修复错误,添加功能,并尝试整理代码并使其更加一致.
以前的开发人员使用两种声明函数的方法,如果背后有原因,我就无法解决.
这两种方式是:
var functionOne = function() {
// Some code
};
Run Code Online (Sandbox Code Playgroud)
function functionTwo() {
// Some code
}
Run Code Online (Sandbox Code Playgroud)
使用这两种不同方法的原因是什么?每种方法的优缺点是什么?有一种方法可以通过一种方法完成,而另一种方法无法完成吗?
我正在制作一个Javascript类,我希望有一个像Java一样的公共静态字段.这是相关代码:
export default class Agent {
CIRCLE: 1,
SQUARE: 2,
...
Run Code Online (Sandbox Code Playgroud)
这是我得到的错误:
line 2, col 11, Class properties must be methods. Expected '(' but instead saw ':'.
Run Code Online (Sandbox Code Playgroud)
看起来ES6模块不允许这样做.有没有办法获得理想的行为,还是我必须写一个吸气剂?
在下面的代码中,我想有一个计数器来跟踪创建的Person对象的数量.这段代码没有这样做,我怎么做到这一点?
function Person(){
this.name = "Peter";
this.counter = this.counter + 1;
alert(this.counter);
}
Person.prototype.counter = 0;
var p1 = new Person;
var p2 = new Person;
Run Code Online (Sandbox Code Playgroud) 我在jQuery中使用Javascript.我想实现params.在C#中,它看起来像这样:
/*
* odp the object to test
* error a string that will be filled with the error message if odp is illegal. Undefined otherwise.
*
* Returns true if odp is legal.
*/
bool isLegal(odp, out error);
Run Code Online (Sandbox Code Playgroud)
在JS中做这样的事情的最佳方法是什么?对象?
function isLegal(odp, errorObj)
{
// ...
errorObj.val = "ODP failed test foo";
return false;
}
Run Code Online (Sandbox Code Playgroud)
Firebug告诉我上述方法可行,但是有更好的方法吗?
我写的代码如下,
function Myfunction(){
Myfunction.myvar = "somevar";
}
Run Code Online (Sandbox Code Playgroud)
执行该功能后,我可以访问 Myfunction.myvar
它是如何工作的?如果我这样做,隐藏在这里的问题是什么?
如果有任何问题,请解释其背景.
不确定我是否完全理解我在这里找到的类似问题的答案,所以要绝对确定:
我想在函数中有一个局部变量,只初始化一次(类似于 C、C++ 等强类型语言中的静态变量)。
当然,我可以全局声明它,但将它放在该函数的范围内似乎更好,因为它不会在其他任何地方使用。
现在,这就是我要做的:
function func(data) {
func.PARAMS = [
{"name": "from", "size": 160, "indexed": true},
{"name": "input", "size": 256, "indexed": false},
{"name": "output", "size": 256, "indexed": false},
];
...
}
Run Code Online (Sandbox Code Playgroud)
我的问题是,func.PARAMS确实只会初始化一次,还是每次调用函数时都会初始化?
根据我找到的一些答案(例如这个答案),我需要在初始化之前使用以下内容:
if (typeof func.PARAMS == 'undefined')
Run Code Online (Sandbox Code Playgroud)
当然,这种“补充”在强类型语言中是无关紧要的,所以我只想确保它是绝对必要的,以确保“静态行为”(即,一次性初始化)。
我有一个关于Typescript如何为简单的类继承生成javascript代码的问题.下面是一些Typescript代码,后跟生成的javascript代码.
打字稿代码:
class Animal {
constructor(public name: string) { }
move(meters: number) {
alert(this.name + " moved " + meters + "m.");
}
}
class Cat extends Animal {
constructor(name: string) { super(name); }
move() {
alert("run...");
super.move(5);
}
}
Run Code Online (Sandbox Code Playgroud)
生成的Javascript代码:
var __extends = this.__extends || function (d, b) {
for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];
function __() { this.constructor = d; }
__.prototype = b.prototype;
d.prototype = new __();
};
var Animal = (function () …Run Code Online (Sandbox Code Playgroud) 在JavaScript中,是否可以在影响其所有兄弟姐妹的对象上调用实例方法?
例如,假设我有以下课程:
function Thing() {
this.active = false;
}
Thing.prototype = {
constructor: Thing,
activate: function() {
this.active = true;
},
deactivate: function() {
this.active = false;
}
};Run Code Online (Sandbox Code Playgroud)
我是否可以创建一个activateAll 可以激活所有类实例的方法Thing?
我需要this.active成为一个实例变量.
javascript ×9
function ×2
closures ×1
ecmascript-6 ×1
idioms ×1
prototype ×1
scope ×1
static ×1
syntax ×1
typescript ×1
variables ×1