joe*_*sid 20 javascript scope function hoisting name-binding
我有以下代码,我在其中声明一个函数,然后是一个与函数同名的变量:
function a(x) {
return x * 2;
}
var a;
alert(a);
Run Code Online (Sandbox Code Playgroud)
我希望这能提醒undefined,但如果我运行它,警报将显示以下内容:
函数a(x){
return x*2
}
如果我为变量赋值(如var a = 4),则警报将显示该值(4),但如果没有此更改,a则会将其识别为函数.
为什么会这样?
Que*_*tin 19
函数是一种对象类型,它是一种值.
值可以存储在变量(和属性中,并作为参数传递给函数等).
功能声明:
一个var语句:
您的声明和var声明均已悬挂.只有其中一个为变量赋值a.
在JavaScript中,函数声明和变量声明都被提升到函数的顶部(如果在函数中定义),或者全局上下文的顶部(如果在函数外部).函数声明优先于变量声明(但不是变量赋值).
功能声明在提升时覆盖变量声明
首先声明一个变量:
var a; // value of a is undefined
Run Code Online (Sandbox Code Playgroud)
其次,值a是一个函数,因为函数声明优先于变量声明(但不是变量赋值):
function a(x) {
return x * 2;
}
Run Code Online (Sandbox Code Playgroud)
这就是你打电话时得到的alert(a);.
但是,如果不是声明变量而是进行变量赋值:var a = 4;那么指定的值4将占优势.
| 归档时间: |
|
| 查看次数: |
8903 次 |
| 最近记录: |