javascript - 这两个函数定义有不同的行为

标签 javascript function

有人可以解释为什么这两个函数的行为不同。

代码片段 1:

function operate1(operator) {
  return function(x, y) {
    return x + operator + y;
  }
}

代码片段 2:

function operate2(operator) {
  return new Function("x", "y", "return x " + operator + " y;");
}

用法:

adder1 = operate1("+");
adder2 = operate2("+");

adder1(5, 3);    // returns "5+3"
adder2(5, 3);    // returns 8

我特别好奇为什么 operate2 会计算算术表达式,而我乍一看以为它会将其计算为字符串。这是否与使用 new 运算符将其定义为函数对象有关?

最佳答案

由于运算符是字符串,第一个进行字符串连接

return x + "+" + y;

第二个执行内容评估,因为这就是new Function有效 - 结果类似于 eval但看看这里的差异:Are eval() and new Function() the same thing?

所以声明

new Function("x", "y", "return x " + operator + " y;");

评估了“return x”+operator+“y;”部分

这是第二个版本,其行为与第一个版本类似

function operate2(operator) {
  return new Function("x", "y", "return x +'" + operator + "'+ y;");
}
var adder2 = operate2("+");
alert(adder2(5, 3))

关于javascript - 这两个函数定义有不同的行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31402821/

相关文章:

javascript - 使用 TestCafe Selector 或 testcafe-react-selector 查找嵌套组件的元素节点时遇到问题

javascript - 如何比较,然后在 AJAX 中更新(如果需要)

javascript - Div 类在滚动时不会改变

javascript - 无法导入html中的js文件

function - 如何在文本区域中按回车键时调用函数。这是我的代码 :

PHP runkit_function_rename 不起作用?

javascript - 使用 app.delete [express.js] 删除 mongo 数据库中的集合

python - 这是获取输入数字平均值的好方法吗?

python - 在函数内修改全局列表

c++ - 通过3d方库回调成员函数