JavaScript学习(三) 变量 作用域和内存
来源:互联网 发布:电视的mac 编辑:程序博客网 时间:2024/05/16 17:40
一 变量:JavaScript的变量为松散型,并不是强制类型不同的数据类型分为:基本类型值和引用类型值。基本类型值:栈内存中简单数据段,即这种值完全保存在内存中的一个位置引用类型值:保存在堆内存中的对象,即这种值保存的实际上只是一个指针,该指针指向内存中的另一个位置,该位置保存对象。1.基本类型值:Undefined,Null,Boolean,Number,String堆内存的大小不固定,可将内存地址保存在栈内存中。2.动态添加属性var box=new Object();box.name='lee'; //添加一个属性alert(box.name);var box='Lee'; //基本数据类型,是字符串box.age=28; //不是引用类型,不能添加动态属性3.复制变量值var box='Lee';var box2=box;//它们两个完全独立,也就是说两个变量,分别操作时,互不影响。var box=new Object(); //创建一个引用类型box.name='Lee'; //新建一个属性var box2=box; //把引用地址赋值给box2box.name='aaa'; //因指向同一个指针,此时box.name='aaa'4.传递参数所有的函数都是按值传递是我,言下之意就是说,参数不会按引用传递,虽然变量有基本类型和引用类型之分。function box(num){ num+=10; return num;}var num=50;alert(box(num)); //打印60 按值传递alert(num); //50;//如果是按引用传递,函数里面的num会成为类似全局变量,把外面的num替换掉,也就是说alert(num) 打印60;单js里面不打印。function box(obj){ //将要传递一个引用类型的参数,但是不是按引用传递 obj.name='Lee'; var obj=new Object(); obj.name='kkk'; //必须通过传参才行,JS没有传递引用的功能}var obj=new Object();box(obj);aler(obj.name); //打印Lee,当方法内obj为kkk时,依然打印'Lee'//按引用传递和传递引用类型是两个不同的概念function box(obj){ obj.name='Lee'; var obj=new Object(); //函数内部又创建了一个对象 obj.name='Mr'; //并没有替换掉原来的obj}最后得出结论:ECMAScript函数的参数都将是局部变量,也就是说,没有按引用传递。5.检测类型typeOf:检测一个变量的类型数组和null都是Object,这时应采用intanceOf运算符来查看box intanceOf Array //是否是数组box intanceOf RegExp //是否是正则表达式当使用intanceOf检查基本类型值时,它会返回false。
作用域:1.执行环境及作用域执行环境定义了变量或函数有权访问其他的数据,决定了它们各自的行为全局变量和函数都是作为window对象的属性和方法创建的var box='blue';function setBox(){ //window的属性和方法 alert(box); //全局变量可在函数里访问}setBox(); //执行方法var box='Lee';function setBox(){ var box='red'; //局部变量}alert(setBox()); //打印bluealert(box); //打印'Lee'var box='Lee';function setBox(box){ alert(box);}setBox('red');alert(box); //打印red,通过传参,也是局部,在setBox下var box='Lee';function setBox(){ function setColor(){ var b='kkk'; alert(b); return 123; } return setColor();}alert(setBox());//作用域链,不能使用setBox().setColor();2.没有块级作用域if(true){ var box='Lee'; //if语句的{}没有封闭作用域的功能}for(var i=0;i<10;i++){ var box='Lee'; //i和box依然是window下的}function box(){ var num=10; //局部变量 num=10; //全局变量,不建议使用}变量访问中,局部变量要比全局变量更快,因为不需要向上搜索作用域链
内存问题:标记清除:给存储在内存中的变量加上标记,去除掉正在运行的变量标记,定期回收var box={ name='Lee';}box=null; //解除对象引用,等待垃圾回收
阅读全文
0 0
- JavaScript学习(三) 变量 作用域和内存
- JavaScript学习4-JS变量、作用域和内存问题
- JavaScript学习(二)之变量、作用域和内存
- JavaScript 中变量、作用域和内存问题的学习
- JavaScript变量作用域和内存
- 【JavaScript】变量、作用域和内存问题
- JavaScript 变量、作用域和内存问题
- JavaScript-变量、作用域和内存问题
- javaScript 变量 作用域和 内存问题
- Javascript变量、作用域和内存问题
- JavaScript变量、作用域和内存问题
- javascript中的 变量,作用域和内存
- JavaScript基础学习笔记(三)——变量、作用域、内存
- 《javascript高级程序设计》读书笔记(三)变量、作用域和内存问题
- JavaScript 变量作用域 & 内存
- [JavaScript]-----变量,作用域,内存
- JavaScript 变量 作用域 内存
- javascript变量,作用域,内存
- My-Redis
- 整合Struts2框架和Spring框架
- JavaScript进阶:深入理解原型与原型链
- c#--WinForm-查询结果的排序
- tomcat性能调优和性能监控(visualvm)
- JavaScript学习(三) 变量 作用域和内存
- shell脚本
- c++容器存放不同结构的数据
- Android 自定义ScrollView可监控滑动方向、滑动到底部
- Android实现仿QQ的图片上传方式
- JavaScript语法学习1--弱类型变量
- MyBatis直接执行SQL的工具SqlMapper
- selenium之 chromedriver与chrome版本映射表(更新至v2.31)
- 整合Spring框架和Hibernate框架