当一个变量和函数同名时,引用将是什么
What will the reference be when a variable and function have the same name?
我有一个名为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
这里发生了什么?为什么变量名称覆盖函数声明?
当我调用
foo
时,它返回字符串bar
函数声明被提升到其作用域的顶部。编译器将函数定义移到上面。然后变量被覆盖为字符串。
代码等同于
function foo() {
return "bar";
}
// Overwriting the value
var foo = "bar"
因此,在这两种情况下,输出都将是'bar'
。
请注意,函数表达式不会被提升。
有关函数提升的更多信息,请参阅Javascript函数范围界定和提升
当我询问
foo()
时,它是undefined
这里的foo
不是一个函数,它是一个字符串。因此,foo()
将抛出错误
未捕获类型错误:a不是函数(…(
以更清晰、更明确的方式声明变量,后者将考虑:
var foo = "bar";
var foo = function () {
return "bar";
};
console.log(foo);
输出是一个函数
以及反转:
var foo = function () {
return "bar";
};
var foo = "bar";
console.log(foo);
输出为"bar"。
在JavaScript中,函数在进入相应范围时进行处理。当解释器到达变量的声明时,将处理这些变量。因此,在您的示例中,首先处理函数,最后一个函数使用名称foo
,然后由变量覆盖。
注意,如果你像这个一样声明你的函数
var foo = function() {}
它实际上在一开始并没有被处理,而且还覆盖了预先声明的变量。
var foo="bar";
var foo = function(){
return "bar";
};
他们是一样的。不要错过把;
放在行的末尾。
两种情况都将返回字符串"bar">
基本上,javascript抓取所有函数并将它们放在文件的顶部它被称为吊装。
因此在这两种情况下,字符串声明都将覆盖函数表达式;
相关文章:
- 这是什么 ==- javascript 运算符
- 我的单元测试选项是什么
- ECMAScript(ECMA-262 5.1)中“引用”的“基值”是什么
- 在方法中的函数中引用 CoffeeScript 类中的“this”的最佳方式是什么?
- 通过 Excel VBA 引用 Acrobat Javascript 全局变量所需的语法是什么?
- 引用JSON树结构的分支的最佳方法是什么
- 跨多个文件多次引用javascript库的行为是什么
- js文件引用末尾的花括号是什么意思
- 是什么导致了这种行为?(闭包,引用)
- Visual Studio中使用的JavaScript引用语法是什么?
- 在Angular中,在闭包中引用服务属性/方法最合适的方式是什么?
- 使用反向引用的最佳方式是什么?
- 立即引用的恰当术语是什么?
- 从getTimezoneOffset()中扣除后的时间戳引用是什么?
- 当一个变量和函数同名时,引用将是什么
- 在原型设计时跟踪javascript对象引用的最佳方法是什么?
- 处理由一个变量引用的javascript对象的正确方法是什么?
- 在javascript中,内联定义函数与将其作为引用传递函数之间的权衡是什么
- 在asp.net-mvc中引用特定于PartialView的javascript的最佳实践是什么
- 代码出现错误;ReferenceError:CryptoJS未定义”,虽然我已经包含了必需的.js引用;原因是什么