我曾经发现在将函数作为参数传递给其他函数之前,给这些函数分配属性是有用的。
具体如下(关于匿名函数和变量分配的函数对象之间的任何混淆,我认为它们不是同一件事):
"(could strict mode have something to do with this?)"
var funcOne = function(arg1, arg2) { return arg1 + arg2; };
funcOne.process = true;
var funcTwo = function(arg1, arg2) { return arg1 + arg2; };
funcTwo.process = false;
var procFunc = function(argFunc) {
if (argFunc.process) {
return argFunc(1,2);
}
return "not processed"
}
procFunc(funcOne); // 3
procFunc(funcTwo); // "not processed"
我想声明一个匿名函数,并同时为其分配属性,这样当它以函数数组堆栈的形式稍后被调用时,条件代码可以依赖该属性。
类似这样:
"(could strict mode have something to do with this?)"
var funcOne = function(arg1, arg2) { return arg1 + arg2; }.process = true;
var funcTwo = function(arg1, arg2) { return arg1 + arg2; }.process = false;
var procFunc = function(argFunc) {
if (argFunc.process) {
return argFunc(1,2);
}
return "not processed"
}
procFunc(funcOne); // "not processed"
procFunc(funcTwo); // "not processed"
意外的"未处理"出现是因为JavaScript将值'true'和'false'分配给了funcOne和Two变量,而且当条件语句
if (argFunc.process)
被评估时(无论如何,我想应该不会出错),它不会抛出错误(即使在“严格模式”下)。我已经使用IIFE成功实现了匿名功能,并将其分配给一个变量,然后将属性分配给该变量并将该变量返回IIFE,但我希望有一种JavaScript语法或更好的方法来解决这个问题。
在我的理解中,我尝试过的点属性分配没有意义。如果程序员想将多个属性赋值给匿名函数怎么办?
我曾经对
var funcOne = function (arg1, arg2) { return arg1 + arg2; } = { process: true };
抱有短暂的希望,但那样会抛出SyntaxError: Invalid left-hand side in assignment
。