javascript - 当变量和函数同名时,引用是什么?

标签 javascript

我有一个名为 foo 的变量和名为 foo 的函数。

//variable followed by function declaration
var foo="bar";
function foo(){
  return "bar";
}
//function declaration followed by variable
function foo(){
  return "bar";
}
var foo="bar";
//When I call foo it returns string bar;
//When I enquired foo() it throws error

这里发生了什么?为什么变量名会覆盖函数声明?

最佳答案

When I call foo it returns string bar;

函数声明为 hoisted到他们范围的顶部。函数定义被编译器移到了上面。然后变量被覆盖为字符串。

代码等效于

function foo() {
    return "bar";
}
// Overwriting the value
var foo = "bar"

因此,在这两种情况下,输出均为'bar'

请注意function expressions没有被吊起。

有关函数提升的更多信息,请参阅 Javascript function scoping and hoisting

When I enquired foo() it is undefined

foo 这里不是一个函数,它是一个字符串。因此,foo()会抛出错误

Uncaught TypeError: a is not a function(…)

关于javascript - 当变量和函数同名时,引用是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40077969/

相关文章:

javascript - 我正在尝试获取 parents parents child div 的文本,我必须使用它来将其从 localStorage 中删除

javascript - 如何更改该字符串中的字母形式?

javascript - 如何使用延迟对象来存储结果并在下次从本地内存中提供服务?

javascript - 如何从多个元素复制属性值并将每个元素复制到不同的元素?

javascript - 如何删除ckeditor中的链接目标选项?

javascript - Jqgrid 选择重复列的问题

javascript - 在转换框中输入后如何将多个链接逐一添加

javascript - IE9和IE9 Compatibility View浏览器模式的区别

javascript - 如何限制1-10 0 auto 生成JavaScript中的一个数字

javascript - 获取 JavaScript promise 值