【问题标题】:Can a function's return value be an lvalue in JavaScript?函数的返回值可以是 JavaScript 中的左值吗?
【发布时间】:2013-05-22 08:28:44
【问题描述】:

Microsoft 允许使用以下语法在 JScript 中设置环境变量:

var sh = WScript.CreateObject("Wscript.Shell");
var env = sh.Environment("PROCESS");
env("TEST") = "testvalue";

我想知道第三行——还有 JSLint,它把这行称为“Bad Assigment”。

但它有效!

将函数的返回值作为左值(如这里)是否兼容 ECMAscript 标准?

如果是:如何编写这样的函数?

【问题讨论】:

标签: javascript jscript lvalue


【解决方案1】:

是的,标准允许函数返回引用。不,你不能用 Javascript 编写这样的函数。 ;)

<...> 赋值的左侧操作数应产生引用。 <...> 函数调用被允许返回引用。这种可能性纯粹是为了宿主对象而被承认的。本规范定义的内置 ECMAScript 函数没有返回引用,也没有规定用户定义的函数返回引用。 http://es5.github.io/#x8.7

【讨论】:

  • 但是你可以做的是设置对象的属性,返回的引用指向ret("sth").someProp = "sth"
  • 这很快,正是我正在寻找的答案。谢谢。
  • @C5H8NNaO4:这并不意味着 ret() 返回一个引用。参考是一对[base,prop],该函数只评估基础部分。
  • @thg435 是的,我的意思是像var someObjs = [{a:"",someProp:"b"}]; (function (a) {return someObjs[a]})(0).someProp = "c";console.log(someObjs[0].someProp) //c
  • @C5H8NNaO4:您的 IEFE 仍然返回 {a:"",someProp:"b"} 对象,然后在该对象上设置属性,它不返回引用。
猜你喜欢
  • 1970-01-01
  • 2020-09-18
  • 2012-01-02
  • 1970-01-01
  • 1970-01-01
  • 2011-07-22
  • 1970-01-01
  • 1970-01-01
  • 2016-03-25
相关资源
最近更新 更多