考虑以下两个片段
function x(){}
var x = 3;
console.log(typeof x) //"number"
发生这种情况是因为首先悬挂了函数声明。
function x(){}
var x;
console.log(typeof x) //"function"
我希望类型为undefined
,因为var x;
创建的值为undefined
的变量。
答案 0 :(得分:0)
其原因在于,在第一部分中,您将x设置为具有数字类型的新变量,换句话说,var x = 3在x上被覆盖并且由于3而具有数字类型 但在第二部分中,您只需调用x,并说它是具有函数类型的变量。
答案 1 :(得分:0)
这是因为在JavaScript中,如果声明了具有相同名称和范围的函数和变量,它们将像这样被吊起:
如果变量具有值,或在任何时候获取值,则将其提升到顶部并优先。
如果变量已创建但具有undefined
值(例如var x;
),则该函数优先。
当您将值undefined
明确设置为var x = undefined
这就是为什么会发生这种情况(它在任何时候获取一个值)
function x() {}
var x;
x = 4;
console.log(typeof x);
此处相同-即使变量和函数的位置为奇数,因为变量获取值:
var x;
function x() {}
x = 5;
console.log(typeof x);
答案 2 :(得分:0)
未定义的变量不会覆盖现有变量。
var x = 111;
var x;
console.log(typeof x);
console.log(x);
答案 3 :(得分:0)
起吊的规则是:
所以起吊顺序应该是
Variable declaration -> Function declaration -> Variable assignment
基本上,看看这篇article来引用这篇文章,发生这种情况的原因是:
函数声明悬挂在变量声明之上,而不悬挂在变量分配之上。
在此section中,它甚至具有与您在问题中给出的示例完全相同的示例。
总而言之,您对函数x的声明不能“覆盖”(悬停)您的变量赋值,但可以“覆盖”您的变量声明。
答案 4 :(得分:0)
x返回函数的类型,因为
“在JavaScript中,函数是一流的对象,因为它们可以像其他任何对象一样具有属性和方法。区别于其他对象的是可以调用函数。总之,它们是函数对象。” < / p>
来源:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Functions
基本上,您已经创建了两个引用相同名称var x
的对象,并且由于没有为asset.requestContentEditingInput
提供任何类型的值,因此会以优先于未分配变量的方式返回该函数。
答案 5 :(得分:0)
在JavaScript中,未声明的变量在执行时被分配为未定义的值,并且其类型也为未定义。
var a;
typeof a; //"undefined"
答案 6 :(得分:-1)
var x
声明了变量x
,但未为其分配任何内容。
如果您确实将其值设置为undefined
,则该值为undefined
:
function x(){}
var x = undefined;
console.log(typeof x) //"undefined"
所以您在示例中所做的只是
var x;
function x(){}
在我的示例中为
var x;
function x(){}
x = undefined;