`
zhouyrt
  • 浏览: 1172833 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

JavaScript中函数声明优先于变量声明

 
阅读更多

即同一个标示符,先后用var和function声明它。最后它是什么呢?

 

var a; // 声明一个变量,标识符为a
function a() { // 声明一个函数,标示符也为a
}
alert(typeof a);

 

 

显示的是“function”,即function的优先级高于var。

 

有人觉得这是代码顺序执行的原因,即a被后执行的funcion覆盖了。好,将它们调换下。

function a() {
}
var a;
alert(typeof a);
 
结果仍然显示的是“function”。即函数声明优先于变量声明。

我们把代码稍作修改,声明a时同时赋值。
function a() {
}
var a = 1; // 注意此处
alert(typeof a);
 
这时显示的是“number”,这相当于
function a() {
}
var a;
a = 1; // 注意此处
alert(typeof a);
 
即把“var a = 1”拆分为两步。 a被重新赋值了,自然是最后的那个值。
0
1
分享到:
评论
3 楼 justjavac 2012-02-20  
javascript中var a; 语句到底有没有声明局部变量。

alert(typeof a);  的查找顺序是局部,然后是全局(即window)。
函数声明并不优先于变量声明
2 楼 justjavac 2012-02-20  
呵呵。
两个a其实不是一个a。

var a; 局部变量。
function a(); 其实是window.a。


function a() {  
}  
var a;  
a = 1; // 注意此处  
alert(typeof a);  


其实,a=1中的a还是function(即window.a)。
1 楼 llq056 2012-02-17  
呵呵   先预编译 后执行赋值

相关推荐

    JavaScript中函数声明优先于变量声明的实例分析

    这会导致所谓的“函数声明优先于变量声明”的现象,也就是说,在相同的标识符上,函数声明会覆盖随后的变量声明。 现在,让我们通过具体的代码实例来分析这个现象。假设我们有一个标识符a,我们先用var声明它: ``...

    javascript变量作用域

    在 JavaScript 中,函数中声明的变量在整个函数中都有定义。这意味着,即使在函数体内部定义了局部变量,该变量也可以在整个函数体内使用,并可以重新赋值。 了解 JavaScript 变量作用域的规则非常重要,因为它可以...

    JavaScript声明全局变量访问方法

    在JavaScript中,全局变量是一种可以在整个程序中任何地方访问的变量,它们的作用域跨越函数和代码块。本篇文章将深入探讨JavaScript声明全局变量的几种方法以及如何访问这些变量。 1. **全局变量的声明方式** - ...

    区别JavaScript函数声明与变量声明

    在JavaScript中,函数声明(Function Declaration)和变量声明(Variable Declaration)之间存在显著的区别,这主要体现在它们的提升(Hoisting)行为、作用域以及执行时机等方面。理解这些差异对于编写可预测且无...

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

    预编译使得函数内部的变量声明具有优先权,覆盖了同名的全局变量。 当全局变量和局部变量重名时,局部变量的范围会"遮盖"全局变量。在`f3`函数中,尽管全局变量`a`已经赋值为1,但在函数内部重新声明了一个局部变量...

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

    函数声明的提升优先于变量声明,如果函数和变量同名,函数会覆盖变量。 1.3 预解析与代码执行 预解析过程包括语法检查、变量和函数声明的提升。代码执行过程则涉及变量的赋值、函数调用等,按代码顺序进行。需要...

    JavaScript进阶:JS的全局变量和全局函数.docx

    全局变量和全局函数是JavaScript中两个基础且重要的概念。 全局变量是在函数外部声明的变量,可以在整个程序的任何地方被访问。它们在程序开始执行时被创建,并在整个程序生命周期内存在。JavaScript的全局变量有三...

    浅谈js中的变量名和函数名重名

    3. 函数声明优先于变量声明:当函数和变量在同一作用域内有相同的名字时,由于函数声明的优先级更高,所以变量声明会被覆盖。这是关键点,因为这会导致后续的赋值操作实际上是在给函数而非变量赋值。 4. 声明与赋值...

    JavaScript程序设计课件:变量的作用范围.pptx

    而在ES6中引入了新的变量声明方式——`let`和`const`,它们在块级作用域内生效,这意味着它们只在如`if`语句、`for`循环、`function`或使用`{}`创建的代码块内可见。`let`可以重新赋值,而`const`一旦声明就不能再...

    基于JavaScript 声明全局变量的三种方式详解

    在JavaScript中,声明全局变量有三种主要方式,每种方式都有其特点和适用场景。以下是详细的分析: 1. 显式声明:使用`var`关键字 这是最常见的方式,通过在函数外部或脚本的顶部使用`var`关键字声明变量,使其成为...

    Javascript的匿名函数讲解

    匿名函数是JavaScript函数式编程的一个基石,它使得编写模块化、封装性好的代码成为可能。 总的来说,匿名函数在JavaScript编程中扮演着重要的角色,它不仅帮助开发者管理变量作用域,而且提高了代码的模块化和可...

    深化解析JavaScript中的立刻执行函数_.docx

    问题2:尝试对函数声明加上圆括号调用会引发错误,因为JavaScript解析器会将`function foo() {}()`视为无效的语法。函数声明后面跟着的圆括号会被视为没有意义,因为它们不能与函数声明一起使用。正确的做法是将函数...

    JavaScript中变量提升与函数提升经典实例分析

    在JavaScript中,函数声明在变量声明之前被处理。如果一个变量与函数同名,变量声明会被忽略,因为函数声明先被处理。如果在同一作用域中函数声明了两次,后面的声明会覆盖前面的声明。 通过一个具体的代码段来说明...

    js-作用域-变量申明提升 - 甘劭 - 博客园1

    在这个例子中,函数声明会优先于变量赋值,因此第一个`func1()`调用将执行函数体的定义,而不是引用赋值后的函数。这是因为函数声明在预解析阶段被提升到了其作用域的顶部。而`var func1 = function() {...}`这部分...

    深入理解变量作用域

    作用域链是一个对象列表,用于存储变量和函数声明。 - 当JavaScript引擎需要查找变量时,它会从当前作用域开始,沿着作用域链向上查找,直到找到相应的变量为止。 - 如果在当前作用域找不到变量,则继续在上一层...

    JavaScript的变量声明提升问题浅析(Hoisting)

    总结起来,理解JavaScript中的变量声明提升和函数声明提升对于编写可维护和可靠的代码至关重要。避免在代码中利用这些特性来创建难以理解的逻辑,而应始终清晰地声明和定义变量和函数。当处理异步代码或在闭包中时,...

    JS变量提升及函数提升实例解析

    - 函数声明的优先级高于变量声明,即如果函数和变量同名,函数会被优先提升。 理解变量提升和函数提升对于避免一些意外的错误至关重要,特别是在编写涉及循环、条件语句以及立即调用的函数表达式(IIFE)时。随着...

    JavaScript中变量提升机制示例详解

    函数声明也会被提升,而且函数声明优先于变量声明。这意味着如果同名的函数和变量声明存在,函数会覆盖变量。 ```javascript log(5); // 5 function log(mes) { console.log(mes); } ``` 在这段代码中,函数...

Global site tag (gtag.js) - Google Analytics