当前位置:首页 > 日记 > 正文

JavaScript变量类型以及变量作用域详解

JavaScript变量类型以及变量作用域详解

变量类型

ECMAScript变量可能包含两种不同类型的数据值:基本类型和引用类型。

基本类型

基本类型指的是简单的数据段,5种基本数据类型:undefined、null、boolean、number、string,基本数据类型是按值访问的,因此可以操作保存在变量中的实际的值。

复制变量值

从一个变量向另一个变量复制基本类型的值,会在变量对象上创建一个新值,然后把该值复制到为新变量分配的位置上。例如:

var num1 = 5;var num2 = num1;

复制前的变量对象

复制后的变量对象

引用类型

引用类型指那些可能由多个值构成的对象,引用类型的值是保存在内存中的对象,JavaScript不允许直接访问内存中的位置,在操作对象时,实际上是在操作对象的引用而不是实际的对象,因此,引用类型的值是按引用访问的。

动态属性

引用类型的值,我们可以为其添加属性和方法,也可以改变和删除其属性和方法。如果对象不被销毁或者这个属性不被删除,则这个属性将一直存在,但是我们不能给基本类型的值添加属性。例如:

var person = new Object();person.say = "hello";alert(person.say); //"hello"

复制变量值

从一个变量向另一个变量复制引用类型的值时,也会将存储在变量对象中的值复制一份放到为新变量分配的空间中,这个值的副本实际上是一个指针,而这个指针指向存储在堆中的一个对象。复制结束后,两个变量实际上将引用同一个对象,改变其中一个变量,就会影响另一个变量。例如:

var obj1 = new Object();var obj2 = obj1;obj1.say = "hello";alert(obj2.say); //"hello"

传递参数

ECMAScript中所有函数的参数都是按值传递的,把函数外部的值复制给函数内部的参数。在向参数传递基本类型的值时,被传递的值会被复制给一个局部变量;在向参数传递引用类型的值时,会把这个值在内存中的地址复制给一个局部变量,因此这个局部变量的变化会反映在函数的外部。例如:

function addTen(num) { num += 10; return num;}var count = 20;var result = addTen(count);alert(count);  //20 alert(result);  //30

执行环境及作用域

执行环境定义了变量或函数有权访问的其他数据,决定了他们各自的行为。
全局执行环境是最外围的执行环境,在WEB浏览器中,全局执行环境被认为是window对象,因此全局变量和属性都是作为window的属性和方法创建的。
每个函数都有自己的执行环境,当执行流进入一个函数时,函数的环境就会被推入一个环境栈中,在函数执行之后,栈将其弹出,将控制权返回给之前的执行环境。
当代码在一个环境中执行时,会创建变量对象的一个作用域链,作用域链的用途是保证对执行环境有权访问的所有变量和函数的有序访问。作用域链的前端始终是当前指行代码所在的变量对象,作用域链中下一个变量对象来自外部环境,再下一个变量对象来自下一个外部环境,这样一直延续到全局环境,全局执行环境的变量对象始终是作用域链的最后一个对象。
标识符解析是沿着作用域链一级一级地搜索标识符的过程。搜索过程始终从作用域链的前端开始,然后逐级地向后回溯,直到找到标识符为止。

内部环境可以通过作用域链访问所有的外部环境,但外部环境不能访问内部环境中的任何变量和函数。

无块级作用域

JavaScript中没有块级作用域,例如:

if(true){ var color = "blue";}alert(color);  //"blue"

在函数中未使用var声明的变量会被成全局变量,例如:

function add(num1,num2){ sum = num1 + num2; return sum;}var result = add(10,20);alert(sum);  //30

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。

相关文章

在Excel表格中怎么插入图表气泡图

在Excel表格中怎么插入图表气泡图

气泡,图表,表格,电脑软件,Excel,  你有没有在Excel工作表中插入过气泡图呢?在很多情况下,大部分用户选择了柱形图或者是折线图,其实在我们的软件中气泡图也是值得大家一试的。以下是小编为您带来的关于在Excel表格中插入气泡图,希望对您有所…

JSP 注释的详解及简单实例

JSP 注释的详解及简单实例

简单实例,注释,详解,电脑软件,JSP, JSP 注释的详解及简单实例一 三种格式二 举例<body> <h1>大家好</h1> <hr> <!-- 我是HTML注释,在客户端可见 --> <%-- 我是JSP注释,在客户端不可见 --%> <% //单行注释 /*多行注释*/ out.p…

PHP实现的回溯算法示例

PHP实现的回溯算法示例

算法示例,回溯,电脑软件,PHP,本文实例讲述了PHP实现的回溯算法。分享给大家供大家参考,具体如下:问题: 一头大牛驼2袋大米,一头中牛驼一袋大米,两头小牛驼一袋大米,请问100袋大米需要多少头大牛,多少头中牛,多少头小牛?实现代码:<?php/* * k = 2x + y…

Photoshop绘制立体漂亮的拾色器图

Photoshop绘制立体漂亮的拾色器图

图标,教程,绘制,漂亮,电脑软件,使用Photoshop绘制立体漂亮的拾色器图标教程,步骤大致分为制作拾色器的底盘、绘制拾色器的内层两大部分,主要用到了图层样式,绘制的拾色器图标非常的精致漂亮,小编很喜欢,推荐给的朋友一起分享学习!效果图:主要过程:1…

excel中乘法公式运算的教程excel中

excel中乘法公式运算的教程excel中

运算,教程,乘法,公式,电脑软件,  Excel中乘法公式具体该如何操作运算呢?下面是由小编分享的excel中乘法公式运算的教程,以供大家阅读和学习。excel中乘法公式运算的教程1步骤1:选择乘数所在的单元格区域A1:A8,按&ldquo;Ctrl+C&rdquo;进行复制…

原生JS中slice | 方法和splice |

原生JS中slice | 方法和splice |

方法,原生,区别,电脑软件,slice,slice()方法和splice()方法都是原生js中对数组操作的方法。那么他两种有什么区别呢?今天通过本文教程给大家简单介绍下。slice(),返回一个新的数组,该方法可从已有的数组中返回选定的元素。例如:arrObject(start…

ps怎样合成一张马戏团大象和老鼠滑

ps怎样合成一张马戏团大象和老鼠滑

马戏团,滑板,大象,老鼠,电脑软件,ps怎样合成一张马戏团大象和老鼠滑板表演的图片?运用PHOTOSHOP软件,可以很简单的制作大家想要的照片,下面和小编一起来看看具体步骤吧。最终效果教程步骤:12 3 4 5 6 7 8 阅读全文1 23 4 5 6 7 8 阅读全文1 …

微信小程序 sha1 实现密码加密实例

微信小程序 sha1 实现密码加密实例

加密,密码,详解,实例,程序,微信小程序 sha1 实现密码加密实例详解在utils中的util.js 文件中增加 函数 实现 字符串转换为16进制加密后的字符串function encodeUTF8(s) { var i, r = [], c, x; for (i = 0; i < s.length; i++) if ((c = s…

ps怎么给添加像素化特效?

ps怎么给添加像素化特效?

像素,特效,电脑软件,ps,利用ps制作像素化人物特效,主要使用了ps的颜色通道和彩色半调功能,现在就把操作步骤和截图分享出来,供大家参考使用,希望对你有所帮助。软件名称:Photoshop CS5 绿色版官方中文正式原版软件大小:104.06MB更新时间:2014-06-0…

QQ空间怎么快速搜索好友动态

QQ空间怎么快速搜索好友动态

动态,空间,快速搜索,好友,电脑软件,  QQ空间怎么快速搜索好友动态?QQ空间新增空间搜索功能,大家开来尝鲜吧。跟随小编,一块看看如何搜索QQ空间好友动态,需要的朋友可以参考下.欢迎大家前来阅读!QQ空间怎么快速搜索好友动态  1、点击appsto…

PPT2013中怎么做让文字波浪起伏效

PPT2013中怎么做让文字波浪起伏效

波浪,文字,效果,怎么做,电脑软件,  在PPT2013中插入文本框之后,输入文字,文字是没有任何效果的,如果给文字添加一些动画效果,在幻灯片放映时毫无疑问会更加生动有趣。以下是小编为您带来的关于PPT2013中让文字波浪起伏效果,希望对您有所帮助。…

全面解析Node.js 8 重要功能和修复

全面解析Node.js 8 重要功能和修复

功能,电脑软件,Node,js,5月30日12点,Node.js 8正式发布了,这个版本具有一系列新功能和性能改进,并且这些功能和改进将获得长期支持(LTS)。下面就来介绍Node.js 8版本中最重要的功能和修复。新版本的代号是Carbon。Node.js 8将从2017年10月起,正式…