0 0

javascript 局部变量输出undefined?5

请问下面的函数 a 输出什么?  为什么是这个值?
var i = 3;
function a(){
	alert("i = " + i);
	var i = 5;	
}
a();
2013年5月21日 23:18

4个答案 按时间排序 按投票排序

1 0

采纳的答案

var i = 3;
function a(){
alert("i = " + i);
var i = 5;
}
a();

因为javascript的变量提前声明特性 即如上代码等价于

var i = 3;
function a(){
        var i;
alert("i = " + i); //此时就是undefined了
i = 5;
}
a();


说白了 变量声明都会在函数开头完成 不管你怎么写的

2013年5月22日 07:37
0 0

undefined,说白了就是javascript解析器智障了,良好的编程习惯根本不会出现这种问题

2013年10月15日 09:52
0 0

这是因为javascript 内部变量和外部便量名字相同时,内部变量的级别高与外部变量的级别。再根据javascript的变量声明的hoisting机制,变量声明永远都会被提升至作用域的最顶端,所以alert 才会有一个undefined.

2013年5月22日 12:46
0 0

js是有个预编译的过程的,请参考这个http://smiky.iteye.com/admin/blogs/1564549

2013年5月22日 08:30

相关推荐

    浅谈JavaScript的全局变量与局部变量_.docx

    这就是为什么在`f2`函数中,尽管全局变量`x`已经赋值为1,但在函数内部,`x`首先被声明为局部变量,导致它在函数开始时的值为undefined。预编译使得函数内部的变量声明具有优先权,覆盖了同名的全局变量。 当全局...

    【JavaScript源代码】JavaScript之不可靠的undefined.docx

    在这个函数中,局部变量`undefined`被赋予了数字1,导致`if (a === undefined)`的判断失效,因为它不再比较的是JavaScript的原始`undefined`值。这种行为可能会导致逻辑错误,特别是在检查变量是否未定义时。 然而...

    浅谈JavaScript的全局变量与局部变量

    JavaScript中的变量管理是一个关键概念,理解全局变量与局部变量的区别对于编写高效且无错误的代码至关重要。在这篇文章中,我们将深入探讨这两个概念以及它们在JavaScript中的工作方式。 首先,JavaScript的作用域...

    Javascript学习之谈谈JS的全局变量跟局部变量(推荐)

    因此,第一次 `alert(a)` 输出 `undefined`,因为局部变量 `a` 在此之前未被赋值。随后,`a = "World"` 对局部变量 `a` 进行赋值,第二次 `alert(a)` 输出 `"World"`。当函数执行结束,局部变量 `a` 被销毁,全局...

    js删除局部变量的实现方法

    虽然JavaScript没有提供`delete`关键字来删除局部变量(它主要用于删除对象属性),但可以将变量的值设置为`undefined`来达到“清除”变量的效果。代码中的`str = undefined`就实现了这一点。之后再次访问`str`,`...

    JavaScript变量声明详解.pdf

    在`test`函数内部,`myname`首先被声明为局部变量,然后才执行`alert`,导致第一次输出`undefined`,而非全局变量的值。因此,当在函数内部使用变量并随后声明时,可能会导致意外的结果,这也是为何建议在函数开始时...

    JS全局变量和局部变量最新解析

    在JavaScript编程中,理解和掌握全局变量与局部变量的概念至关重要。全局变量在整个脚本或函数作用域内都可访问,而局部变量只在其所在的函数内部有效。本文将深入解析这两种变量的特性,并通过实例代码来演示它们的...

    JavaScript变量声明详解

    本文将深入探讨JavaScript中的变量声明方式,以及与之相关的全局变量、局部变量、隐式全局变量和“hoisting”(悬置/置顶解析/预解析)的概念。 首先,JavaScript提供了三种声明变量的方式:`var`、`let` 和 `const...

    JavaScript程序设计-变量作用域.pdf

    本文将深入探讨JavaScript中的全局变量、局部变量、变量提升、词法作用域以及作用域链。 1.1 全局变量与局部变量 全局变量在整个程序中都可访问,即使在函数内部定义,它们也会成为全局变量,除非在函数内部重新...

    JavaScript实例精通 源代码

    1_2.htm 局部变量和全局变量。 1_3.htm JavaScript中的强制类型转换。 1_4.htm 在HTML中为JavaScript传递变量。 1_5.htm 在HTML中引用JavaScript的变量。 1_6.htm 比较undefined和"undefined"。 第2章(\2) 示例...

    javascript中错误使用var造成undefined

    ` 之前,此时局部变量`a` 还未定义,因此试图访问它会返回`undefined`,因为JavaScript会尝试在当前作用域查找变量,找不到就会向上级作用域查找,但这里没有找到全局变量`a`的引用,所以显示`undefined`。...

    javascript课程内容总结

    JavaScript 课程内容总结 JavaScript 是一种广泛应用于网页开发的编程语言,...JavaScript 中的作用域包括全局变量和局部变量。全局变量定义在函数外部,作用于整个脚本。局部变量定义在函数内部,只能在函数中使用。

    JavaScript笔记

    在函数内部,局部变量的声明会提升到函数顶部,因此在声明前使用局部变量时,会输出undefined。 此外,笔记提到HTML和CSS用于创建静态页面,而JavaScript负责页面的动态功能实现。程序运行在内存中,内存的大小影响...

    一道关于JavaScript变量作用域的面试题_.docx

    首先,我们要理解全局变量和局部变量的区别。全局变量在整个程序中都是可见的,而局部变量只在其所在的函数内部可见。如果在函数内部没有使用var关键字声明变量,那么该变量也会成为全局变量。例如: ```javascript...

    JavaScript 面试基础

    函数体中的局部变量只在函数执行时生成的调用对象中存在,函数执行完毕时局部变量即刻销毁。 四、变量作用域 JavaScript 中变量的作用域相对与 JAVA、C 这类语言显得更自由,一个很大的特征就是 JavaScript 变量...

    JavaScript基础知识例子

    局部变量是JavaScript中的另一重要概念,它们只在声明它们的作用域内有效。`021-javascript-局部变量.html` 可能讲解了变量的声明(var、let、const),作用域规则以及变量提升(hoisting)的概念。了解这些有助于...

    JavaScript 变量作用域分析

    然而在 childUndefined 函数中,虽然声明了 scope 变量但没有初始化,导致输出 "undefined",因为此时局部变量还没有被初始化。 代码2和代码3演示了全局变量和局部变量的使用。在代码2中,局部变量被声明后直接使用...

Global site tag (gtag.js) - Google Analytics