繁体   English   中英

javascript 中的奇怪变量提升

[英]weird variable hoisting in javascript

所以我们知道用 var 关键字声明的变量被提升了,如果我们在初始化之前尝试访问它们的值,我们会得到未定义的。 但是,在下面记录名称变量的代码中,记录了 function 并且未定义为什么?

console.log(name);
console.log(lol);

var name = function(args = "Hello World"){
    console.log(args)
}

var lol = function(args = "Hello world") {
    console.log(args)
}

output 是

function(args = "Hello World"){
    console.log(args)
}

main.js:57 undefined

为什么名称变量未定义?

window 是根 scope 已经有一个名称属性。 尝试以下操作并查看控制台中的 output。 如果单击链接,则打开的页面将 MyWin 命名为 output。

HTML (test.html)

<head>
    <title>test</title>
</head>

<body>
    <a href="test.html" target="MyWin">Click me!</a>
    <script src="test.js"></script>
</body>

</html>

Javascript (test.js)

console.log("name", name);
console.log("notname", notname);
console.log("lol", lol);


var notname = function (args = "Hello World") {
    console.log(args)
}

var lol = function (args = "Hello world") {
    console.log(args)
}

考虑代码

 console.log(test); var test = function(args = "Hello World"){ console.log(args) }

这将返回undefined 因为只有声明被提升 也就是说,你提升后的代码将是

 var test; console.log(test); test = function(args = "Hello World"){ console.log(args) }

我认为您应该像那样记录为什么您感到困惑。

 console.log(name); console.log(lol); var name = function(args = "Hello World"){ console.log(args) } var lol = function(args = "Hello world") { console.log(args) } console.log(name); console.log(lol);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM