关于JS函数变量作用域

这样一段代码:

var a = 123

function f() {
    console.log(a);
    var a = 1;
    console.log(a);
}

执行f(),会怎样输出呢?

你可能会想当然的第一次console.log输出的是123,也就是全局变量的值,而第二次显示是1。

但是,最先输出的是undefined。

函数的作用域始终优先于全局作用域,所以局部变量a会覆盖掉与他同名的全局变量,尽管第一次console.log的时候,a还没有被正式定义,但该变量已经存在本地空间了。即输出undefined。

时间: 2024-12-20 22:32:26

关于JS函数变量作用域的相关文章

PHP和JS中变量作用域

一,PHP中变量作用域 对于大多数PHP的变量只有一个作用域.在用户自定义函数里采用局部变量作用域.所有的函数内使用的变量被设置为局部变量.例如: <?php $a=1; function test() { echo $a; } test(); ?> 这段程序不会输出任何的东西因为echo语句要输出局部变量 $a ,而函数内的 $a 从未被赋过值.你可能注意到和C语言有点小小的区别,C中全局变量可以直接在函数内引用,除非它被一个局部变量所覆盖.因为这使得人们可能不注意修改了全局变量的值.在PH

JavaScript-4.2函数,变量作用域---ShinePans

<html> <head> <meta http-equiv="content-type" content="text/html;charset=GB2312"/> <title> 4.2 函数和变量作用域 </title> <!--脚本部分--> <script type="text/javascript"> var v1,v2; v1=10; v2=20; f

javascript 闭包与函数变量作用域

浏览器事件循环工作原理 浏览器有一个事件循环用于检查事件队列,处理延时的事件.UI事件(例如:点击,滚动等),ajax回调,以及提供给setTimeout()和setInterval()的回调,都会依次被事件循环处理. 因此,当调用setTimeout()函数时,即使延迟的时间被设置为0,提供的回调也会被排队 回调会呆在队列中,直到指定的时间用完后,引擎开始执行动作(如果它当前不执行其他动作) 因此,即使setTimeout()回调被延迟0ms,它仍然会被排队,并且直到函数中其他非延迟的语句被执

js的变量作用域

js不支持块级变量作用域,而是包含它们的函数的作用域, 例如: function query() { var a = 1; for (var i = 0; i < 10; i++) { var b = i; } return b + a; } var q = query(); alert(q);// 9 + 1 = 10 也包括在Catch块 function test() { var a= 'a', b = []; b.push(a); try { throw 'exception'; } c

js学习--变量作用域

作为一名菜鸟的我,每天学点的感觉还是不错的.今天学习闭包的过程中看到作用域与作用域链这两个概念,我觉得作为一名有追求的小白,有必要详细了解下. 变量的作用域 就js变量而言,有全局变量和局部变量.这里我觉得这个按字面意思理解就行了.......下面举个例子 var message = "今天我做的糯米蒸排骨"; //定义一个全局变量 function doL(){ var ss = "侠客行很好看"; //定义一个局部变量 alert(message); //输出&

js随笔-变量作用域

1.函数中定义的变量只在函数中起作用,所以两个函数定义相同的变量互不影响 function fun(){ var i=0 } console.log(i);//i is not defined 2. 函数中内嵌函数时,内部的函数可以访问外部函数的变量,外部函数则不能访问内部的变量 function fun(){ var i=0; function fun2(){ var j=1; console.log(i); } fun2(); } fun();//0 function fun(){ var

关于javascript函数变量作用域问题

作用域 1.如果一个变量在函数体内部申明,则该变量的作用域为整个函数体,在函数体外不可引用该变量: 2.JavaScript的函数在查找变量时从自身函数定义开始,从"内"向"外"查找.如果内部函数定义了与外部函数重名的变量,则内部函数的变量将"屏蔽"外部函数的变量.

#9.6课堂JS总结#变量作用域 date()对象 math()对象

一.变量的作用域 1.JavaScript的作用域链 首先看下下面这段代码: <script type="text/javascript"> var rain = 1; function rainman(){ var man = 2; function inner(){ var innerVar = 4; alert(rain); } inner(); //调用inner函数 } rainman(); //调用rainman函数 </script> 观察aler

js 函数 /变量/ 以及函数中形参的预解析的顺序

//js 解析分为两个阶段:预编译和执行期 //预编译:声明但是没有初始化 //声明式:funcion a(){} //赋值式:var a = function(){} //匿名函数:function(){} //-----函数之间比较 //结论 1 同一个函数声明,后来者居上 //结论 2 声明式函数要提前赋值式函数 //-----函数和变量的比较 //结论 3 函数声明提升优先级大于变量声明 函数声明要覆盖变量声明 console.log(f1)//打印的是函数 f1() //2 funct