联系
我们
投稿
反馈
评论 返回
顶部

内容字号: 默认 大号超大号

段落设置: 段首缩进取消段首缩进

字体设置:切换到微软雅黑切换到宋体

JavaScript变量、作用域及内存详解

2017-07-08 17:21 出处:互联网 人气: 评论(
王偌薇 欧尚潮流网 雪白颜料 双鹰河吧 皇德耀世将神 白山小娜 看戏在霍格沃兹 新民五笔

简而言之,堆内存存放引用值,栈内存存放固定类型值。“引用”是一个指向对象实际位置的指针。

<script type="text/javascript”> var box = new Object(); //创建一个引用类型 var box = "trigkit4"; //基本类型值是字符串 box.age = 21; //基本类型值添加属性很怪异,因为只有对象才可以添加属性。 alert(box.age); //不是引用类型,无法输出; </script>

去掉var的局部变量

var a = function() {
<script type="text/javascript">      var name = "Jack";       function setName(){            var name = "trigkit4";            return name;  //从底层向上搜索变量     }     alert(setName());       </script> 

每个环境都可以向上搜索作用域链,以查询变量和函数名;但任何环境都不能通过向下搜索作用域链而进入另一个执行环境。在这里,如果去掉var name = "trigkit4",那么将弹出“Jack”

// if语句:  <script type="text/javascript"> if(true){                        //if语句的花括号没有作用域的功能。  var box = "trigkit4"; } alert(box);//弹出 trigkit4 </script> 

for循环语句也是如此。


body.removeChild(treeRef);

//现在#tree可以被释放了。

for (var i = 0; i < 90000; i++) {   var buggyObject = {     callAgain: function() {       var ref = this;       var val = setTimeout(function() {         ref.callAgain();       }, 90000);     }   }    buggyObject.callAgain();   //虽然你想回收但是timer还在   buggyObject = null; } 

调试内存

<script type="text/javascript">     var man = new Object();//man指向了栈内存的空间地址     man.name = "Jack";     var man2 = man;//man2获得了man的指向地址      man2.name = "ming";//因为他们都指向同一个object,同一个name,不管修改谁,大家都修改了     alert(man2.name);//两个都弹出ming     alert(man.name); </script> 

由以上可以得出:在变量复制方面,基本类型和引用类型也有所不同,基本类型复制的是值本身,而引用类型复制的是地址。

ECMAScript中,所有函数的参数都是按值传递的,

分享给小伙伴们:
本文标签:

更多文章

相关文章

评论

发表评论愿您的每句评论,都能给大家的生活添色彩,带来共鸣,带来思索,带来快乐。

  • 蛮便宜
  • 抠门网
  • Copyright © 2002-2014 版权所有