我正在使用一个例子来学习JS中的装饰器。当我在Chrome DevTools中将以下示例代码作为代码段运行时,我收到错误信息:
未捕获的SyntaxError:标识符'wrapped'已经声明为:1:1
但是,当我使用Node.js在终端中运行相同的代码时,一切都很好。将变量名称从const wrapped = loggingDecorator(doSomething);
更改为const hello = loggingDecorator(doSomething);
告诉我这不是问题b / c错误只是变成了:
未捕获的SyntaxError:标识符'hello'已经声明为:1:1
任何人都知道发生了什么事?
function doSomething(name) {
console.log('Hello, ' + name);
}
function loggingDecorator(wrapped_func) {
return function() {
console.log('Starting');
const result = wrapped_func.apply(this, arguments);
console.log('Finished');
return result;
}
}
const wrapped = loggingDecorator(doSomething);
正如评论中提到的那样,wrapped
可能已经在您正在检查的页面或任何扩展名中声明。我建议你使用以下方法之一。
{
function doSomething(name) {
console.log('Hello, ' + name);
}
function loggingDecorator(wrapped_func) {
return function() {
console.log('Starting');
const result = wrapped_func.apply(this, arguments);
console.log('Finished');
return result;
}
}
const wrapped = loggingDecorator(doSomething);
}
要么
把你的代码放在一个生活中
(function(){
function doSomething(name) {
console.log('Hello, ' + name);
}
function loggingDecorator(wrapped_func) {
return function() {
console.log('Starting');
const result = wrapped_func.apply(this, arguments);
console.log('Finished');
return result;
}
}
const wrapped = loggingDecorator(doSomething);
})();