我在互联网上通过了这个有趣的测验。
console.log((function(x, f = (() => x)){
var x;
var y = x;
x = 2;
return [x, y, f()]
})(1))
Run Code Online (Sandbox Code Playgroud)
选择是:
[2,1,1]
[2,未定义,1]
[2,1,2]
[2,未定义,2]
我选择了解决方案2 TBH,基于x已被重新定义,y被声明和定义为没有值的情况,并且f具有不同的作用域,因此获得的全局x内存点比函数x内存点大。
但是,我在jsbin.com中尝试过
我发现这是解决方案1,虽然不确定为什么会弄乱函数主体并var x从函数主体中删除,但发现响应更改为#3,这在x值更改时是有意义的,因此表明x和f为2,y为1,这是全局声明的。
但我仍然不明白为什么它显示1而不是未定义。
在搜索其他内容时,我发现了这段代码
$x = "foo";
function foo(){ echo "wtf"; }
$x(); # "wtf"
Run Code Online (Sandbox Code Playgroud)
当我搜索谷歌这个时,我得到的只有C结果而不是PHP,而我知道在PHP引擎盖下是C,我真的想要一些解释.
这叫什么?
以及它如何被PHP zend解释?它是某种可赎回的吗?
它仍然可以在PHP 7+中使用吗?