问题标签 [function-expression]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
javascript - 在 JavaScript 中,为什么我不能立即调用函数声明?
只有函数表达式可以立即调用:
但不是函数声明?这是因为函数声明被提升并且已经立即执行了吗?
编辑:我引用的资源
http://benalman.com/news/2010/11/immediately-invoked-function-expression/
javascript - 双重命名的方法会产生副作用吗?
我最近遇到了几个定义对象方法的库,如下所示:
有人可以向我解释双重命名的用途吗?我理解 和 之间的区别function someName(){};
,var someName = function(){};
但这种设置对我来说没有多大意义。
javascript - 为什么命名的javascript函数仍然存在?
这是对您在 john resig 的 Learning Advanced Javascript 应用程序中找到的内容的改编。
人们期望o.x(5)
应该抛出一个错误,但它会执行。为什么?
javascript - Firefox上的函数表达式 - 不是预期的结果
上面的代码是函数表达式的示例,在 Firefox 28 中返回 1,而在 Chrome 中返回 2(预期结果)。为什么Firefox给出错误的结果?
javascript - 函数内的javascript函数表达式
下面的工作 javascript 片段不包括验证,因为它仅用于学习目的。但是,我不了解在 buildBoundDetector() 函数中定义变量“isBetween”之后的事件流。为什么通过变量'f'传递一个数字有效?
javascript - Javascript 中的错误/警告:循环内的函数
我是 JavaScript 新手,正在从在线教程中学习它。当前表达式是关于函数表达式的使用,特别是 - 从函数内部返回函数表达式。
这是代码:
我正在使用 MS Visual Studio Code,在代码结束时,我收到一个错误和一个警告,即使代码成功运行,并且我根据wantsRide
变量获得所需的结果。但是,我无法理解错误和警告的原因。
在屏幕底部(下面的屏幕截图),我得到 1 个十字和 1 个感叹号图标,我认为这意味着 1 个错误和 1 个警告。
但是当我点击它时,我会在栏的顶部看到一个突出显示的区域,上面写着! Function inside loop
这些行被突出显示:
这里似乎有什么问题?我知道它是for
循环内的函数表达式,但为什么会生成警告?是不是因为该if(pick==allRides[i][0])
语句可能永远不会为真,所以函数表达式永远不会被执行?
javascript - 存储在 JavaScript 中的命名函数表达式中标识符的不可变绑定记录在哪里?
最近我遇到了一些关于命名函数表达式(NFE)的有趣事实。我知道一个 NFE 的函数名可以在函数体内访问,这样递归更方便,节省了我们arguments.callee
的 . 并且函数名在函数体之外是不可用的。例如,
这是一个有据可查的功能,kangax 有一篇关于 NFE 的精彩帖子并在那里提到了这种现象。最让我吃惊的是,一个 NFE 的函数名不能与函数体中的其他值重新关联。例如,
在上面的例子中,我们尝试foo
用另一个值重新绑定标识符5
。但这失败了!而我翻到 ES5 Spec 发现在创建 NFE 时会创建一个不可变的绑定记录并添加到词法环境的环境记录中。
问题是,当 NFE 在函数体内引用它自己的函数名时,该名称被解析为自由变量。在上面的例子中,foo
在 NFE 内部被引用,但它既不是这个函数的形参也不是局部变量。所以它是一个自由变量,它的绑定记录可以通过 NFE 的 [[scope]] 属性来解析。
所以考虑一下,如果我们在外部范围内有另一个同名的标识符,似乎会有一些冲突。例如,
当我们执行 NFE 时,自由变量 foo
被解析为与其关联的函数。但是当控件退出 NFE 上下文时,foo
被解析为外部作用域中的局部变量。
所以我的问题如下:
- 函数名的不可变绑定记录存放在哪里?
- 在 NFE 中解析时,函数名称为何
foo
超过?var foo = 1
它们的绑定记录是否存储在相同的词法环境中?如果是这样,怎么做? foo
函数名内部可访问但外部不可见的现象背后是什么?
有人可以通过 ES5 规范对此有所了解吗?我在网上找不到太多讨论。
javascript - 调用外部名称的函数表达式
我在javascript中有这样的函数表达式:
我如何从其他地方调用它,比如从另一个函数中调用它。
我试过这个。
并在其他一些函数中调用它,比如
或者
或者
但它不起作用。我怎样才能解决这个问题?
javascript - JavaScript:将函数声明更改为旧代码中的表达式
我正忙于重构遗留代码。在这里,我可以看到 for 函数同时使用了声明和表达式。我知道声明被提升,表达式在时间逐步执行时起作用。也有,NFE
但我不能使用它们,因为IE8
. 所以,我的问题是:
我可以将所有函数声明替换为表达式吗?这种更换是否有任何明显或可能的问题?我想使用表达式,在文件顶部定义它们。
javascript - Javascript私有方法:函数表达式与函数声明
在 javascript 中创建私有方法(各种)的常用方法是:
上面的示例也可以使用函数声明而不是函数表达式来完成:
这两种声明私有方法的方式有什么不同?(一个是表达式,另一个是声明)
例如,表达式显然会在每次调用构造函数时生成一个新函数。函数声明也会发生这种情况,还是因为函数声明是在解析时评估的,所以它只被评估一次?(与在执行时评估的函数表达式相反,你明白了。)
编辑:我知道 javascript 并不是真的的私有方法。我松散地使用这个词。
编辑:不是var functionName = function() {} vs function functionName() {}的重复,如果有任何关于 javascript 'classes' 的函数表达式与函数声明的重复。我的问题不是一般的函数表达式和函数声明之间的区别,而是它们在javascript“类”中的“私有成员”方面的区别。