JS 变量提升

1 var a = 1;
2   function foo() {
3     console.log(a);
4     var a = 2;
5
6   }
7
8   foo();  //undefined

根据变量提升机制,最后得出undefined;

变量提升是指在一个作用域中声明的变量,JS解析时会把变量声明提升至作用域内的第一行,也就是说上面那段代码等同于:

1     var a = 1;
2     function foo() {
3         var a;  //被提升至作用域内第一行
4         console.log(a);
5         var a = 2;
6
7   }
8
9   foo();

因此,也就可以理解为什么是undefined了

时间: 2024-10-29 19:10:37

JS 变量提升的相关文章

js 变量提升+方法提升

<!DOCTYPE html> <html> <head lang="en"> <meta charset="UTF-8"> <title></title> <script type="text/javascript"> var a = 100; function t() { alert(a); var a = 10; } t(); //输出结果为undefine

js变量提升的坑

关于js变量提升 变量提升 在js函数内部是可以直接修改全局的变量的,个人感觉是不好的设计, 但是确实存在这个概念 原理: 先查看有没有函数变量bb 查看形参有没有bb 查看全局有没有bb 报错, 找不到bb变量 修改函数内部 var bb = 1; function foo(cc){ var bb = 2; // 这里的bb, 其实是函数的局部变量 console.log(cc); } foo(bb); // 1 console.log(bb); // 1 修改的是形参 var bb = 1;

js变量提升小记

作为世界上最优美的语言javascript的使用者,呵呵,js的魅力是无穷的,今天来聊聊他的魅(dan)力(teng)之一,变量提升. 每种语言所定义的变量基本都会有一定得作用域,而js的作用域则存在着一定的陷阱.首先看一下下面一道题: <script> var str1 = "haha"; var str2 = "hehe"; function t1() { console.log(str1); console.log(str2); var str2

关于JS变量提升的一些坑

1 function log(str) { 2 // 本篇文章所有的打印都将调用此方法 3 console.log(str); 4 } 函数声明和变量声明总是会被解释器悄悄地被“提升”到方法体的最顶部 变量声明.命名.提升 在JS中, 变量有4种基本方式进入作用域: 语言内置: 所有的作用域里都有this和arguments:(需要注意的是arguments在全局作用域是不可见的) 形式参数: 函数的形式参数会作为函数体作用域的一部分: 函数声明: 像这种形式: function foo() {

js变量提升与函数提升

在es6之前,js语言并没有块级作用域,即{}形成的作用域,只有全局作用域和函数作用域,所谓的提升,即是将该变量的声明或者函数的声明提升,举个例子 console.log(global); //undefined var global = 111; console.log(global);//111 显然,上面代码处于一个全局的作用域中,在该作用域中使用var声明了一个global变量,其实际的声明过程如下: var global; console.log(global); //undefine

js变量提升的一个小坑

好久没写博客了,原本想实训结束能对整个实训项目认真总结一下,没想到回到学校一点都不轻松,最近在制作网页版简历,遇到了一个小问题,现在不总结以后肯定忙得顾不上,所以长话短说,抓紧时间写下来. 对js语法比较熟的同学可能都知道:js是没有块级作用域的,有一个新手很容易出错的地方 for(var i = 0 ; i < 10 ; i ++){ setTimeout(function(){ console.log(i) },1000*i) } 这段代码会输出10个10,而不是期望的1,2,...,10,

js变量提升和函数提升

变量,作为编程语言最基础的部分,每种语言的变量不尽相同,但又大径相庭.大部分编程语言的变量有块级作用域,如if.for.while... 但JavaScript不纯在块级作用域,而是函数作用域,并且有自己独有的特性--变量提升.(ES6新添加的let.const使其可以用块级作用域) 对于函数的变量访问时遵循作用域链的,即当前函数运行时会有一个当前作用域,当饮用某个变量时,会先查找当前作用域内是否存在该变量的定义,如果不存在则根据作用域链向上去查找父函数的作用域,有则拿来使用,没有则继续向上直到

js变量提升

JavaScript的函数定义有个特点,它会先扫描整个函数体的语句,把所有申明的变量“提升”到函数顶部: 'use strict'; function foo() { var x = 'Hello, ' + y; alert(x); var y = 'Bob'; } foo(); 虽然是strict模式,但语句var x = 'Hello, ' + y;并不报错,原因是变量y在稍后申明了.但是alert显示Hello, undefined,说明变量y的值为undefined.这正是因为JavaS

JS变量提升相关总结

关于变量提升这个玩意,你说简单吧,很多人做好几年前端了,仍然会晕掉,例如说我. 前几天笔试遇到一个变量提升的问题,答案是写出来了,然后面试官让我讲,我就讲不出来了. 今天分享一篇看到别人的总结,加上一点自己的理解.希望能有所帮助,自己也能记住. 1.关于声明变量的过程: var a = 1; var b = 2; 其实他的执行过程是这样的: var a; var b; a = 1; b = 2; 先声明变量,后执行赋值. 2.变量提升 function test(){     a=2;