JavaScript中var a=b=c=d的小发现

看了别人的博客随手记录下

先看一下以下的代码

1 var a=1,b=2,c=3;
2
3     (function(){
4         var a=b=1;
5     })();
6
7     console.log(a);
8     console.log(b);

这是大家众所周知的闭包了,没错,闭包的一个很重要的用途就是变量不能在外部访问,不会污染外部变量,所以大家是不是会认为7,8行的结果分别是1 2 呢?其不然,7,8行的正确结果是1,1。

为什么会这样呢?我一开始也是认为结果是结果是1 2,其实JS是这样执行的,在闭包中var声明的是局部变量,所以a是局部变量,而b呢,b没有用var声明,所以在闭包中b是全局变量,所以前面的b=2被闭包里面的b=1覆盖了,所以输出a和b都是1

我是这么理解的。大家有不同的理解可以留言,由于第一次写博客,文笔欠佳,大家见谅

时间: 2024-12-20 08:05:30

JavaScript中var a=b=c=d的小发现的相关文章

JavaScript中var关键字的使用详解

作用 声明作用:如声明个变量. 语法 ? 1 var c = 1; 省略var 在javascript中,若省略var关键字而直接赋值,那么这个变量为全局变量,哪怕是在function里定义的. ? 1 2 3 4 5 6 7 8 <script type="text/javascript">   function Define() {     a = 2;   }   function Hello() {     alert(a);   } </script>

Javascript中var that=this;是什么意思(转)

网上大神真是多,书上看半天没看懂,看到大神们的讲解,真是醍醐灌顶~ 哈哈,我啥时候也能这样给别人解疑~ 你可能会发现别人写的代码中有这么一句:var that = this;,这代表什么意思呢? 在javascript中,this代表的是当前对象. var that=this就是将当前的this对象复制一份到that变量中.这样做有什么意义呢? $('#zhetenga').click(function(){ //this是被点击的#zhetenga var that = this; $('.z

javascript中var that=this的意思

你可能会发现别人写的代码中有这么一句:var that = this;,这代表什么意思呢? 在javascript中,this代表的是当前对象. var that=this就是将当前的this对象复制一份到that变量中.这样做有什么意义呢? $('#zhetenga').click(function(){ //this是被点击的#zhetenga var that = this; $('.zhetenga').each(function(){ //this是.zhetenga循环中当前的对象

javascript中var that=this

在JavaScript中,this代表的是当前对象. $('#conten').click(function(){ //this是被点击的#conten var that = this; $('.conten').each(function(){ //this是.conten循环中当前的对象 //that仍然是刚才被点击的#conten }); }); 可以看到,this对象在程序中随时会改变,而var that=this之后,that没改变之前仍然是指向当时的this,这样就不会出现找不到原来

javascript中var、let和const的区别

在javascript中,var.let和const都可以用来声明变量,那么三者有什么区别呢?要回答这个问题,我们可以从先想想:三种不同的声明会影响变量的哪些方面?这些方面也就是变量的特性,那么变量有哪些特呢?无非就是两个:一个是变量的数据类型,是数字,字符串还是数组或者其他的,另一个就是变量的作用域,是全局的还是局部的,又或者是某个代码块的.因此我们可以从以下两个方面来探究三种声明方式的区别: 1.声明后变量的数据类型有什么不同? 2.声明后变量的作用域有什么不同? 先看第一个方面,数据类型有

面试官竟然问我JavaScript中var、let和const有什么区别?

在JavaScript中有三种声明变量的方式:var.let.const. 目录1.var let const1.var(1)var定义的变量在之后可以修改,如果不初始化会输出undefined,不会报错. var a;console.log(a); // undefined// -----------------------------console.log(a); // undefinedvar a = 1;12345(2)var定义的变量,可以跨块访问, 不能跨函数访问. (3)var只有

JavaScript中var、let、const区别?

简单来说是: let是修复了var的作用域的一些bug,变的更加好用.let是更好的var.var的作用域是函数作用域由var定义的变量,它作用域在一个函数体内,而不是我们其他语言理解的大括号{ }内.而let是块级别(大括号括起来的内容) const声明的变量只可以在声明时赋值,不可随意修改,这是最大的特点. 使用var声明的变量,其作用域为该语句所在的函数内,且存在变量提升现象: 使用let声明的变量,其作用域为该语句所在的代码块内,不存在变量提升: 使用const声明的是常量,在后面出现的

JavaScript中var变量引用function与直接声明function

今天在h5开发app的过程中遇到了一个js问题,function的执行问题 在js中声明函数function有这两种方法 var A=function(){...} 或者 function A(){...} 第一种称之为变量引用函数,因为js允许函数作为一个值传递给变量,第二种是直接声明式函数 一直以为这两种没什么区别,然而,今天在使用过程中发现,当我使用第一种方式声明function的时候,如果如下这样: document.getElementById("xx").addEventL

javascript中var同时声明多个变量时的原理是什么?

<script> function show(){ var a=b=c=d=5; } show(); alert(a);//弹a时报错(not defined),而b.c.d都能弹出5 </script> 因为赋值是从右向左结合:var a=b=c=d=5; 等价于 var a=(b=(c=(d=5)));,其中只有a被声明了,b,c和d都是自动解析为全局变量了. <script> function show(){ var a=5,b=6,c=7; } show();