基本集类型的值和引用类型的值
5种基本数据类型:Undefined、Null、Boolean、Number和String,这5种基本数据类型是按值访问的,因为可以操作保存在变量中的实际的值。
动态属性:
我们创建了一个对象并将值保存在了person中,然后为这个值添加属性。对象不销毁则这个值一直存在。
var person = new Object(); person.name = "Nicholas"; alert(person.name); //"Nicholas"
但是我们不能给基本数据类型添加属性,比如:
var name = "Nicholas"; name.age = 27; alert(name.age); //undefined
复制变量:
从一个变量向另一个变量复制基本数据类型时,会在变量上创建一个新的对象。他们的值是不会相互影响的。例如:
var num1 = 5; var num2 = num1; num1 = 10; alert(num1); //10 alert(num2); //5
从一个变量向另一个变量复制引用类型时,这个值实际上是一个指针,两个变量实际上引用的同一个对象。例如:
var obj1 = new Object(); var obj2 = obj1; obj1.name = ”Nicholas“; alert(obj2.name); //"Nicholas"
参数传递:
在向参数传递基本数据类型的值时,被传递的值会被复制给一个内部变量(即命名参数,就是arguments对象的一个元素)。例如:
function addTen(num){ num += 10; return num; } var count = 20; var result = addTen(count); alert(count); //20 alert(result); //30在向参数传递引用类型的值时,这个值的内存地址复制给一个内部变量。例如:
function setName(obj){ obj.name = "Nicholas"; } var person = new Object(); setName(person); alert(person.name); //Nicjolas以上代码创建了一个对象,person和obj引用了同一个对象。于是,当在函数内部为obj添加name属性时,外部的person也将改变;下面例子说明了参数是按值传递的,而不是按引用类型传递:
function setName(obj){ obj.name = "Nicholas"; obj = new Object(); obj.name = "Greg"; } var person = new Object(); setName(person); alert(person.name); //Nicjolas函数内部修改了参数的值,但原始引用让然保持不变。实际上,当函数内部重写obj时,这个变量引用的就是一个局部对象了,这个局部对象在函数执行完后立即被销毁。
类型检测:
要检测一个变量是不是基本数据类型,typeof操作符是最佳工具。
var s = "Nicholas"; var b = true; var i = 22; var u; var n = null; var o = new Object(); alert(typeof s); //string alert(typeof b); //boolean alert(typeof i); //number alert(typeof u); //undefined alert(typeof n); //object alert(typeof o); //object检测引用类型的值时,ECMAScript提供了instanceof操作符,语法如下:
alert(person instanceof Object); //true alert(colors instanceof Array); //true检测对象时始终返回true ,检测基本类型时返回false。
执行环境和作用域:
全局执行环境是最外层的一个执行环境,在Web浏览器中,全局执行环境是window对象。
var color = "blue"; function changeColor(){ var anotherColor = "red"; function swapColors(){ var tempColor = anoterColor; anotherColor = color; color = tempColor; // 这里可以访问color、anotherColor和tempColor } // 这里可以访问color和anotherColor,但是不能访问tempColor swapColor(); } // 这里只能访问color changeColor();延长作用域链:
try-catch语句catch块 和 with语句。两个语句都会在作用域链的前端添加一个变量对象。
function buildUrl(){ var qs = "?debug=true"; with(location){ //接收location对象 var url = href + qs; } return url; } try{ ... }catch(e){ alert(e); //被抛出的错误对象 }with语句中引用变量href时,实际上是location.href,(可以使用location对象里边的所有属性和方法)。
没有块级作用域:
例子:
if (true) { var color = "red"; } alert(color); // redfor循环中的变量:
for (var i = 0; i < 10; i++) { doSomething(i); } alert(i); // 10有for循环创建的变量i即使在循环结束后,依旧存在于循环外部的执行环境中;
变量声明:
// 使用var声明的变量 function add(num1, num2){ var sum = num1 + num2; return sum; } var result = add(10, 20); alert(result); //30 alert(sum); //这里会抛出错误 // 没有var声明的变量 function add(num1, num2){ sum = num1 + num2; return sum; } var result = add(10, 20); alert(result); //30 alert(sum); //30
使用var声明变量会添加到最近的作用域中,否则将会添加到全局作用域中。
相关推荐
JavaScript 没有块级作用域,而是基于函数作用域和全局作用域的。 首先,看看 JavaScript 的作用域链是如何工作的。JavaScript 首先在当前作用域中查找变量,如果没有定义,则会继续查找上一层作用域,直到找到...
本篇文章旨在通过一系列示例和解释,帮助读者掌握JavaScript中的变量作用域机制。 #### 二、全局变量与作用域划分 ##### 1. 全局变量 在JavaScript中,全局变量实际上是`window`对象的一个属性。例如,如果在一个...
函数的变量和作用域 /全局变量和全局作用域指的是变量或者函数的位置 // 全局变量: 在script之间或者一个独立的js文件中,在全局作用域中定义的变量 全局变量。在任何位置都可以访问 // 全局作用域:在script...
本文将从JavaScript权威指南出发,深入探讨变量作用域的相关知识点,包括全局作用域、局部作用域、以及闭包等高级概念。 #### 二、全局作用域与局部作用域 1. **全局作用域** - 定义:在JavaScript中,如果一个...
JavaScript是一种广泛用于网页开发的脚本语言,它的函数和作用域是实现代码逻辑结构和模块...理解JavaScript中的变量作用域非常重要,它有助于避免变量命名冲突和意外的变量修改,从而编写出更加健壮和易于维护的代码。
本文探讨了JavaScript中的变量作用域问题,通过对两种变量的特性从不同角度进行分析和测试,讨论了如何控制变量作用域的有效方法。 变量作用域是JavaScript编程过程中经常遇到的问题之一,对于编程人员来说是一个...
理解JavaScript变量作用域.pdf 本人还有几十本经典javascript书籍以及无数javascript资料,要的加我qq 568094881,本人网址:www.maoshanhai.com
JavaScript是一种广泛用于网页和网络应用的编程语言,其核心特性之一就是变量作用域。变量作用域决定了变量在何处可以被访问以及何时会被销毁。本文将深入探讨JavaScript中的全局变量、局部变量、变量提升、词法作用...
本文将深入探讨JavaScript中的变量作用域,以及它如何影响代码的运行和组织。 首先,我们来理解什么是变量作用域。在JavaScript中,变量作用域决定了变量在何处可以被访问和识别。主要有三种类型的作用域:全局作用...
ECMAScript中的变量类型主要有两种:基本类型值和引用类型值。基本类型值是指那些简单数据段,例如数字、...函数作用域和块级作用域是程序设计中两种不同的变量访问方式,它们在设计和调试程序时都扮演着重要的角色。
在JavaScript编程语言中,变量和作用...总的来说,理解JavaScript中的函数定义、调用、参数处理、变量作用域和安全实践是编写高效、安全代码的基础。掌握这些概念可以帮助开发者编写出更加灵活和可靠的JavaScript代码。
JavaScript主要有两种作用域:全局作用域和局部作用域。 全局作用域是指在代码的任何位置都可以访问的变量或函数,这通常包括在最外层函数之外定义的变量、未声明直接赋值的变量(它们会自动声明为全局)以及window...
变量作用域是程序中定义这个变量的区域。 先来看一段示例: /* 代码1 */ var scope = "global "; function checkScope() { var scope = "local "; function childCheck() { var scope = "childLocal "; ...
说起变量第一个要说到的肯定就是作用域,正是因为不熟悉JS的作用域,往往就会把面向对象的作用域张冠李戴,毕竟有些东西总是习惯性的这样,但是并不是每次照搬都是可以的,那么下一个问题就来了,js到底是什么作用...
总之,掌握函数参数和变量作用域是编程基础的重要部分。通过合理使用它们,我们可以编写出高效、可读且易于维护的代码。在实际开发中,理解这些概念有助于避免常见的编程陷阱,并提升代码质量。
JavaScript主要有全局作用域和局部作用域两种。局部作用域通常在函数内部,而全局作用域则在整个脚本或模块中都有效。 当查找变量时,JavaScript会遵循作用域链。从当前执行环境(如函数或块)开始,如果找不到变量...
变量作用域的定义决定了变量可以被访问的区域,对于理解变量在不同上下文中的访问权限非常重要。 首先,我们要了解JavaScript中的变量有三种声明方式:使用var关键字、let关键字和const关键字。每种声明方式决定了...
JavaScript 执行环境和作用域的深层次理解 在 JavaScript 中,执行环境和作用域是两个非常重要和基本的概念,理解了这两个概念对于 JavaScript 中很多脚本的运行结果就能明白其中的道理了。执行环境是一个概念,一...
在JavaScript编程语言中,变量、作用域和内存管理是核心概念,对于理解和编写高效、可靠的代码至关重要。在本章中,我们将深入探讨这些主题。 首先,我们要了解变量及其作用域。JavaScript中的变量是松散类型的,这...