2017-10-10 26 views
0

我正在测试这段代码,但发生了一些奇怪的事情。它显示了一个错误为什么我的代码在向“name”变量赋值时不起作用?

Uncaught Typeerror: name is not a function

,但如果我改变“名”到别的,它的作品!

(name = function (x) {console.log(x || "not set");})(); 
name ('Rami'); 

这是出现在Chrome控制台

error screenshot

+1

请张贴的问题,而不是图像实际的错误文本。所有设备或位置都无法看到图像。 – Nope

+0

,因为它是你的浏览器中的一个变量(它指向'window.name') –

+2

@neuhaus否它不是关键字 –

回答

1

原因是在浏览器上下文中,“name”隐含地指的是“window.name”。

您是否知道该函数会被调用两次?

如果你只是想返回一个函数指针,你可以这样做:

name2 = function (x) {console.log(x || "not set");}; 
name2('Rami'); 
+0

您可以将window.name设置为函数指针,但后来它将包含一个字符串,我猜'window'在这方面是神奇的 – neuhaus

+0

是的,这是正确的答案,它不是某些人可能想到的范围,我打算两次调用该函数。我会避免使用“名称”。 – sam

0

你调用从IIFE的范围

的外设功能这将是正确的做法错误这样做:

(function() { 
    const name = function(name) { 
    console.log('Hello ' + name); 
    } 
    name('Rami'); 
}()); 

例如:https://repl.it/MX9O

+0

另外,正如上面的注释所述,'name'这个词是有问题的,因为它在父上下文中有一个存在的意义。对于其他标签,调用函数之外的函数的错误可能会被javascript“固定”,就像它自动添加缺少分号等一样。 – arbuthnott

+0

在IIFE内部包含'const name'不会覆盖''窗口。名称的财产。 @arbuthnott – Baruch

+1

正确,但我认为如果'name'在父上下文中没有意义(例如'window.name'),那么将该调用移出IIFE将由代码纠正。这就是为什么使用其他标签(对于'const myName = ...'可能会起作用 – arbuthnott

相关问题