为什么这个JavaScript代码的结果是“;未定义”;
Why is the result of this JavaScript code "undefined"?
我试图弄清楚为什么浏览器控制台窗口中的Javascript代码的结果是未定义的?不应该是"外面"吗?
var text = 'outside';
function logIt(){
console.log(text);
var text = 'inside';
};
logIt();
感谢
这是"可变吊装"的结果。(请参见http://adripofjavascript.com/blog/drips/variable-and-function-hoisting.)
为了使代码按预期运行,您需要在函数范围内分配变量,或者将其作为参数传递给函数:
var logIt = function (){
var text = 'outside';
console.log(text);
text = 'inside';
};
logIt();
或
var text = 'outside';
var logIt = function (txtArg){
console.log(txtArg);
var text = 'inside';
};
logIt(text);
在JavaScript中,变量被"提升"到函数的顶部。也就是说,与其他一些语言(如C)不同,函数中声明的变量在整个函数的范围内。所以编译器看到你的函数是这样的:
function logIt(){
var text;
console.log(text);
text = 'inside';
} // <-- no semicolon after a function declaration
当您将text
声明为logIt
内部的局部变量时,它会在外部作用域中隐藏该变量。当一个变量被声明时,它被初始化为undefined。这就是为什么未定义会被打印出来。
如果要将text
保留在外部作用域中,只需在函数内部省略var
声明即可。
var text = 'outside';
function logIt(){
console.log(text); // logs 'outside' now
text = 'inside';
}
logIt();
控制台.log(文本)的位置错误:)
但说真的,这是Javascript的变量提升。http://goo.gl/0L8h5D
此:
var text = 'outside'
logIt = function () {
console.log(text);
var text = 'inside';
}
logIt();
相当于:
var text // hoisted to top of scope; text is undefined
text = 'outside' // text is now assigned in place
logIt = function () {
var text; // hoisted to top of scope; text is undefined
console.log(text); // spits out undefined
text = 'inside'; // text is now assigned in place.
}
logIt();
为了避免这些问题,养成在作用域块顶部声明所有var的习惯。
var text = 'outside'
logIt = function() {
var text = 'inside'
console.log(text)
}
logIt()
如果您的意图是吐出"outside",那么您应该在logIt函数内部使用不同的标识符名称。
您正在覆盖变量文本。为了得到答案,你正在寻找从第四行带走的var。
原因是在函数内部有一个来自父作用域或全局作用域的名为text的变量,您正在更改它,然后在离开函数时将其处理掉。
声明变量text
一次。演示
var text = 'outside';
function logIt(){
console.log(text);
text = 'inside';
};
logIt();
全局+本地:一个额外复杂的案例
var x = 5;
(function () {
console.log(x);
var x = 10;
console.log(x);
})();
这将打印出未定义的和10,而不是5和10,因为JavaScript总是将变量声明(而不是初始化)移动到范围的顶部,使代码等效于:
var x = 5;
(function () {
var x;
console.log(x);
x = 10;
console.log(x);
})();
根据这个答案,JavaScript中变量的范围是什么?
- 未定义不是函数:模块导出
- 得到"未定义不是函数“;使用显示原型图案时出错
- 未捕获的类型错误:未定义不是上的函数.GetElementByID
- 在同一页面中使用两个版本的jquery将返回'未定义不是函数'
- "未定义不是函数“;错误jQuery,.replaces,scrollTop
- 在将 Pickadate 与 Meteor 一起使用时,未定义不是函数错误
- 反应.js:未捕获类型错误:未定义不是一个函数
- jQuery onclick 函数:未定义不是一个函数
- 出现“未捕获的类型错误:未定义不是函数”控制台错误
- Javascript - 错误“未定义不是函数”在以前工作的代码上引发
- 理解Javascript中的“未定义”:它是如何工作的,如何安全地检查它以及是否可以重新分配
- 未捕获的类型错误:未定义不是函数,在中为循环创建了对象
- 未定义不是一个函数,谷歌地理定位
- 谷歌URL缩短器API-未压缩类型错误:未定义不是一个函数
- 无法解释的未捕获类型错误:未定义不是函数
- AngluarJS单元测试-未定义不是函数
- 树映射导致未捕获类型错误:未定义不是函数
- 表达式'$的结果.cookie'[未定义]不是函数
- 可以't create Kendo GanttChart:未定义不是一个函数,尽管GanttDataSource
- TypeError:表达式'的结果;input.replace'[未定义]不是函数