相关疑难解决方法(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万
查看次数

如何创建一个jQuery函数(一个新的jQuery方法或插件)?

我知道在JavaScript中语法如下:

function myfunction(param){
  //some code
}
Run Code Online (Sandbox Code Playgroud)

有没有办法在jQuery中声明一个可以添加到元素中的函数?例如:

$('#my_div').myfunction()
Run Code Online (Sandbox Code Playgroud)

javascript jquery function

195
推荐指数
8
解决办法
52万
查看次数

为什么`obj.foo = function(){};`不将名称`foo`分配给函数?

从ES2015(ES6)开始,函数具有适当的名称(包括官方name属性),除了明显的函数声明和命名函数表达式(例如赋值给变量)之外,还以各种方式创建函数时分配名称(函数的名称设置为变量的名称),分配给对象属性(函数的名称设置为属性的名称),甚至函数参数的默认值(函数的名称设置为参数的名称).但是,在现有对象上(例如,不在对象初始值设定项中)分配属性不会将该属性的名称分配给该函数.为什么不?当然必须有一个特定的理由,这是不可取的/可能的.它以前如何?

要明确:我不是在问如何解决它.我问是什么阻止了这个看似很明显的案例在被许多其他人(包括默认参数值!)处理时被处理.一定有充分的理由.

请不要推测或理论化.TC39有理由不包括它.我对这个原因感兴趣.我已经通过了TC39会议记录,但还没有找到它.到目前为止,我发现的最接近的是艾伦· 威尔夫斯 - 布洛克回复贝尔吉说,由于"各种反对意见",没有就此形式达成共识,但遗憾的是他没有说出那些反对意见.

细节:

以下所有内容都foo兼容的浏览器上为该功能指定名称:

// Requires a compliant browser

// Assigning to a variable or constant...
// ...whether in the initializer...
{
    let foo = function() { };
    console.log("1:", foo.name); // "foo"
}
{
    const foo = function() { };
    console.log("2:", foo.name); // "foo"
}
// ...or later...
{
    let foo;
    foo = function() { };
    console.log("3:", foo.name); // "foo"
}
// As …
Run Code Online (Sandbox Code Playgroud)

javascript function ecmascript-6

53
推荐指数
1
解决办法
2325
查看次数

为什么JavaScript函数声明(和表达式)?

我见过其他人使用以下模式.

var bar = function foo(){};
console.log(bar); // foo()
console.log(foo); // ReferenceError: foo is not defined
Run Code Online (Sandbox Code Playgroud)

但为什么?如果两者都被宣布,我可以看到这一点,但事实并非如此.原因是什么?

javascript

15
推荐指数
2
解决办法
460
查看次数

在ES6中使用命名或未命名的类表达式有什么用?

在代码中,我使用的是命名类"Car".现在,如果我尝试使用喜欢var carNew = new Car("ferrari");,那么它会给我一个错误.那么ES6中命名类表达式的用途是什么?

'use strict';
var car = class Car{
  constructor(model){
        this.model = model;
    }
}
var carNew = new car("ferrari");

console.log(carNew); //car {model: "ferrari"}
console.log(carNew.constructor == car); //true
Run Code Online (Sandbox Code Playgroud)

javascript ecmascript-6

15
推荐指数
2
解决办法
1861
查看次数

命名和未命名匿名Javascript函数之间的差异

通常,在Javascript中,当我想将匿名/内联函数作为参数传递给另一个函数时,请执行以下操作之一。

someFunctionCall(function() {
    //...
});

someFunctionCall( () => {
    //...
});
Run Code Online (Sandbox Code Playgroud)

但是,我最近继承了一个使用命名函数作为内联参数的代码库,如下所示

someFunctionCall(function foo() {
    //...
});
Run Code Online (Sandbox Code Playgroud)

我以前从未见过这种语法。该函数似乎仍然是匿名的- foo在调用范围或被调用范围中都没有定义函数。这仅仅是样式问题,还是可以使用命名函数(foo上述)作为匿名函数来更改该程序的行为或状态?

这是专门针对NodeJS(不是基于浏览器的程序)程序的,并且我对使用函数作为参数的特定行为特别感兴趣。也就是说,欢迎跨平台和运行时提供来自行为的信息。

javascript closures anonymous-function node.js function-expression

11
推荐指数
1
解决办法
187
查看次数

在Javascript中,何时需要为变量分配命名函数?

在Babel JS的在线REPL(http://babeljs.io/repl/)中,当我输入时:

let a = (x) => x+1
Run Code Online (Sandbox Code Playgroud)

它将被转化为:

"use strict";

var a = function a(x) {
  return x + 1;
};
Run Code Online (Sandbox Code Playgroud)

var a = function a(x)看起来有点令我困惑,因为我理解其中任何一个var a = function(x)function a(x)足够.

有没有人有关于何时以及为什么需要将命名函数分配给变量的想法?

javascript ecmascript-6

9
推荐指数
2
解决办法
939
查看次数

如果你不能用你给它们的名字真正引用它们,那么命名函数表达式有什么意义呢?

如果你不能用你给它们的名字真正引用它们,那么命名函数表达式有什么意义呢?

var f = function g() {
    console.log("test");
};

g(); // ReferenceError: g is not defined
Run Code Online (Sandbox Code Playgroud)

javascript

8
推荐指数
2
解决办法
238
查看次数

ES6是否不需要命名函数表达式?

因此,在阅读了TJ Crowder对这个问题的回答之后,似乎ES 6规范具有推断绑定到变量名的匿名函数的函数名的规则.我们还需要使用命名函数表达式吗?看起来ES6使它变得不必要了.

javascript function

5
推荐指数
1
解决办法
98
查看次数

一旦将javascript函数分配给不同的var,为什么不能通过其原始名称访问javascript函数?

var f=function foo()
{
console.log("hello");
};

f();
foo();
Run Code Online (Sandbox Code Playgroud)

这会产生一个错误:"异常:ReferenceError:foo未定义"

但是"foo"是定义的.为什么会发生这种情况?我知道这是一个函数表达式,"f()"用于访问此函数.但这不是一个匿名函数,我有一个这个函数的名字.为什么我无法使用其名称访问该功能?

javascript function

5
推荐指数
1
解决办法
46
查看次数