关闭

JS的变量作用域问题,理解js全局变量和局部变量问题

时间: 2017-11-30阅读: 1557标签: js知识

js的变量分为2种类型:局部变量和全局变量。主要区别在于:局部变量是指只能在变量被声明的函数内部调用,全局变量在整个代码运行过程中都可以调用。值得注意的js中还可以隐式声明变量,而隐式声明的变量千万不能当做全局变量来使用。下面将通过一些例子做详细说明:


例子一:

var a="Hello";  
 function test(){  
    var a;  
    console.log(a);  //输出undefined
    a = "World";  
    console.log(a);  //输出World
    console.log(this.a);//输出Hello
    console.log(this === window);//true
} 
test();
console.log(a);//输出Hello

从上面代码可以看出:当局部变量跟全局变量重名时,局部变量在函数内部有声明,同时在函数内部输出时会覆盖掉全局变量,当使用this调用的时候,this默认指向的是window,所以输出的是全局变量的值。

  

例子二:

var a = "Hello";
function test(){
    console.log(a);//undefined
    var a = "world";
    console.log(a);//World
}
test();

这里并没有输出“Hello”,我们在第一已经定义了全局变量a,这是由于:js在执行test()方法时声明部分已经完成了,在执行过程中才进行赋值,所以在这个函数中,执行第3行前,可以认为已经声明了局部变量a,但是并没有定义(这里即赋值),所以第3行输出结果为undefined,执行第4行a 赋值为“world”,所以打印局部变量a的值是world 。


例子三:

var a = "Hello";
function test(){
    console.log(a);//Hello
    a = "World";
    console.log(a);//World
}
test();
console.log(a);//World

这是由于在函数内部,一般用var声明的为局部变量,没用var声明的一般为全局变量,所以没声明的a赋值为“World”,这里的a是全局变量。


例子四:

function test(){
    var a=b=c=d="World";
}
test();
console.log(b+c+d);//而b、c、d都能输出World
console.log(a);//输出时候报错(not defined)

这是由于Js的赋值是从右向左结合: var a=b=c=d="World"; 等价于 var a=(b=(c=(d="World")));,其中只有a被声明了,b,c和d都是自动解析为全局变量了。


站长推荐

1.云服务推荐: 国内主流云服务商,各类云产品的最新活动,优惠券领取。地址:阿里云腾讯云华为云

链接: http://www.fly63.com/article/detial/203

为什么javascript不起作用?

JavaScript是一种属于网络的脚本语言,已经被广泛用于Web应用开发,常用来为网页添加各式各样的动态功能,为用户提供更流畅美观的浏览效果。通常JavaScript脚本是通过嵌入在HTML中来实现自身的功能的。

JavaScript弹框、对话框、提示框方法,以及原创JS模拟Alert弹出框效果

通过js实现网页弹出各种形式的窗口,常用的:弹出框、对话框、提示框等。弹出对话框并输出一段提示信息 、弹出一个询问框,有确定和取消按钮 ,利用对话框返回的值 (true 或者 false) 、弹出一个输入框,输入一段文字,可以提交、window.open 弹出新窗口的命令

js变量引用(指针)

基本类型:Number,Boolen,null,String,Underfined 存放在栈内存中,数据长度是固定的。引用类型:Object存在堆内存中,数据长度是变化的(同时有栈内存中有一个指针指向这个Object的)。

浅谈js自记忆函数

最近阅读《JavaScript忍者秘籍》看到了一种有趣的函数:自记忆函数。记忆化(memoization)是一种构建函数的处理过程,能够记住上次计算结果,当函数计算得到结果时,就将该结果按照参数存储起来。

JavaScript中的特殊运算,一些有趣的js等式

JavaScript中的特殊运算,字符,true,false参与运算结果会怎么样?打开控制台。这会允许你再你的浏览器里输入下面所有的代码,所以你可以实时的看到发生什么了。

归并排序JavaScript实现_关于归并排序思路和代码实现

归并排序:其基本思想是分治策略,先进行划分,然后再进行合并,步骤是: 1.我们以数组[1, 5, 6, 2, 4, 3]举例,归并排序的第一步,将数组一分为2;2.接着将分成的数组继续一分为2,直到长度为1,我们构成如下二叉树(成树 从上往下)

javascript:void(0)的含义

首先,void关键字是javascript当中非常重要的关键字,该操作符指定要计算或运行一个表达式,但是不返回值。语法格式:void func()、void(func())

数字在JavaScript中是如何编译的

JavaScript中的所有数字都是浮点数。这篇博客文章解释了这些浮点数如何在64位二进制内部表示。浮点数并不一定等于小数,定点数也并不一定就是整数。所谓浮点数就是小数点在逻辑上是不固定的,而定点数只能表示小数点固定的数值

一眼看穿JS变量,作用域和内存问题

这篇文章将梳理下环境,作用域链,变量对象和活动对象,以及内存管理问题。基本类型和引用类型的值,我们都知道JS中的数据类型有两大类,基本数据类型和引用数据类型,下面从三个方面来解剖他们

JavaScript中公有、私有、静态、受保护的属性和方法

在开发中,我们需要限制某些属性和方法的暴露程度,使得它们不能通过对象实例本身被访问、修改或调用。要了解js面向对象,就必需先了解js中什么是公有、私有、静态、受保护。

点击更多...

内容以共享、参考、研究为目的,不存在任何商业目的。其版权属原作者所有,如有侵权或违规,请与小编联系!情况属实本人将予以删除!