我实际上不知道这段代码的输出是数字。有人可以帮助您理解此示例中JS运行的逻辑是什么?
<script>
var f = (
function f(){ return "1"; },
function g(){ return 2; }
)();
console.log(typeof f);
</script>
答案 0 :(得分:4)
您正在使用comma operator。您基本上是在这里执行g
逗号运算符评估每个操作数(从左到右),并返回最后一个操作数的值。
var f = (
function f(){ return "1"; },
function g(){ return 2; }
)()
类似于:
var temp = function g(){ return 2; }
f = temp() // returns 2
答案 1 :(得分:2)
由于逗号运算符。
x = a, b;
这将计算a,然后计算b,并使用b的结果。也就是说,仅评估a的副作用,否则将其结果丢弃。
那是
var f = (
function f(){ return "1"; },
function g(){ return 2; }
)();
是一种奇特的写作方式
var f = (function g(){ return 2; })();
这是一种奇特的写作方式
var f = 2;
而2是一个数字。
答案 2 :(得分:1)
f不是函数。
而是包含g函数返回的值。
f当前保持在IIFE中返回的值
var f = (
function f(){ return "1"; },
function g(){ return 2; }
)();
console.log(f);
</script>
答案 3 :(得分:1)
所以,对,逗号运算符。但是更重要的是功能上下文的改变。无法再从全局范围访问它们。
Does the comma operator influence the execution context in Javascript?的答案可能有些扩展:
var f = (
function f() { return "1"; },
function g() { return 2; }
)();
console.log(f);
console.log(typeof f);
console.log(g()); // throws error: 'g' is not defined