关于js的变量提升问题

1.关于变量提升;

例子一:console.log(a) //undifined;

var a=0;

例子二:

console.log(a)  //undifined;

if(true){

  var a=0;

}

console.log(a)  //0;

例子三:

console.log(a) //undifined;

if(!true){

  var a=0;

}

console.log(a) //undifined;

以上;只要js中声明了变量,不管什么条件,都会自动提升到代码最开始的位置;

迷惑烟雾弹

if(!("a" in window)){

  var a=0

}

console.log(a)//undifined;  第一还是变量提升;第二(“a” in window)为“true”

-------------------------------------------分割线----------------------------------------------------------------------

2.函数提升

console.log(f1) //function f1(){}

console.log(f2) //undifined;

function f1(){}  //函数会提升到文件最开始的位置

var f2=function(){} //变量会提升

原文地址:https://www.cnblogs.com/ladycat/p/10204697.html

时间: 2024-10-10 04:26:56

关于js的变量提升问题的相关文章

深入理解js的变量提升和函数提升

一.变量提升 在ES6之前,JavaScript没有块级作用域(一对花括号{}即为一个块级作用域),只有全局作用域和函数作用域.变量提升即将变量声明提升到它所在作用域的最开始的部分.上个简历的例子如: 1 2 3 4 5 6 7 8 9 10 console.log(global); // undefined var global = 'global'; console.log(global); // global function fn () { console.log(a); // unde

关于JS中变量提升的规则和原理的一点理解

????关于变量提升,以前在一些教程和书籍上都听到过,平时开发中也知道有这个规律,但是今天突然在一个公开课中听到时,第一反应时一脸懵逼,然后一百度,瞬间觉得好熟悉啊,差点被这个概念给唬住了,不信我给你看个栗子,你也会恍然大悟的: (function(){ console.log(v); var v = 'I love you'; console.log(v); })() // undefined I love you ????这就是一个典型的变量提升的例子了,规则是怎样的呢,我的理解是在一个作用

关于JS中变量提升的规则和原理的一点理解(二)

上篇文章中讲到变量提升和函数提升的先后顺序时蒙了,后来去查了一下资料,特别整理一下. 在<你不知道的JavaScript(上卷)>一书的第40页中写到:函数会首先被提升,然后才是变量. 书中的一个代码示例是: foo(); //1 var foo; function foo() { console.log(1); } foo = function() { console.log(2); } 这个例子相对比较好理解,就是foo这个函数会先被声明再作用域的开始部分,实际上这个代码片段会被引擎理解为

js中变量提升

1 var v='Hello World'; 2 (function(){ 3 alert(v); 4 var v='I love you'; 5 })() 会出现alert出来的是undefined,原因是因为在函数域里定义一个和外部变量一样名称的变量时,变量的声明会提升至第一句,赋值则不会变.所以上述语句其实是这样执行的 var v='Hello World'; (function(){ var v; alert(v); v='I love you'; })()

js关于“变量提升、作用域、私有作用域等知识点”高级解题思路

var i = 2,    x = 5;var fn = function (x) {    x += 3;    return function (y) {        console.log((x++) + y + (--i));    }};var f = fn(1);f(2);fn(3)(4);f(5); 答案:f(2) => 7;     fn(3)(4) => 10;    f(5) =>9; 解题思路: 1. var f = fn(1);相当于开了一个堆内存(私有作用域)

js 函数提升和变量提升

问题背景:在写一个非常简单的弹出交互时,定义了一个全局变量和一个方法,这个方法始终调不到这个变量,得到高人指点后,特意总结一下这个知识点: 一.变量提升 在ES6之前,JavaScript没有块级作用域(一对花括号{}即为一个块级作用域),只有全局作用域和函数作用域.变量提升即将变量声明提升到它所在作用域的最开始的部分. console.log(global); // undefined var global = 'global'; console.log(global); // global

JavaScript中的各种变量提升(Hoisting)

首先纠正下,文章标题里的 “变量提升” 名词是随大流叫法,“变量提升” 改为 “标识符提升” 更准确.因为变量一般指使用 var 声明的标识符,JS 里使用 function 声明的标识符也存在提升(Hoisting). JS 存在变量提升(Hoisting),这个的设计其实是低劣的,它允许变量不声明就可以访问,或声明在后使用在前.新手对于此则很迷惑,甚至许多使用JS多年老手也比较迷惑.但在 ES6 加入 let/const 后,变量Hoisting 就不存在了. 一. 变量未声明,直接使用 f

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变量提升小记

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