论坛首页 Web前端技术论坛

Javascript 垃圾收集机制

浏览 13861 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (3) :: 隐藏帖 (0)
作者 正文
   发表时间:2011-10-17  
psychopath 写道
JS真的不简单,给大家出个题,最后输出啥

   var scope = "testing";
      function test() {
        var scope = "global";
        return function() {
          var scope = "local";
          return new Function("return scope"); 
        }
      }

      test()()(); 

testing;
如果是return  function(){return scope};
就是 local了....
0 请登录后投票
   发表时间:2011-10-17  
firefly_zp 写道

[quote="kidneyball"]什么是这里的“全局函数”呢?我们平时说的全局函数是指Global下提供的内置函数,但你这里说的好像不是这个意思。[/quote] 

 

 

                       var testVariable = function(){

name = "pluto" // 未用 var 声明,全局变量

var name = "pluto_local" // var 变量声明,局部变量

this.name = "xxPluto" // 对象属性,可以通过类来调用

this.height ="180";  // 对象属性,通过类来调用使用

// 下面声明一个全局函数(对内对外均可调用),age 前不带 var (这里就是一个全局函数)

age = function(a,b){

return a+b;

//infoOutput(); // 调用 infoOutPut 函数输出姓名,年龄。去掉最前方的 // 可以调用 infoOutput进行输出

}

var infoOutput = function(){

alert("Name: " + name);

alert("Age: " + age(3,4));

}

// 原型函数,类的对象可以调用它

testVariable.prototype.callProto= function(){   

  //只能访问:全局变量和全局函数   

  this.where = function(){   

// 下面name的输出为 xxPluto, 即 this.name 的值

alert("Where can we go? " + name);

callOutput();   

}   

 

var callOutput = function(){   

alert("callOutput name: " + name);  

// age = function(a,b) 现在为一个全局函数,可以尝试在 age 前面加入 var,则显示 age is not defined。

alert("callOutput age(10,12): " + age(10,12));

}   

 

var testInfo = new testVariable(); 

// 通过 “类的对象名+属性” 来调用对象属性的值,即上面 this.height = "180"

alert("height: "+testInfo.height); 

var newCall = new testInfo.callProto();   

//调用原型函数的实例函数   

newCall.where();

 

举了上面这么一个例子,希望可以帮助你理解。

 

你说的全局函数,怎么我看着像是一个取值为函数的全局变量呢。你的意思是,全局或局部,不是函数本身的性质,而是看谁引用了它?

0 请登录后投票
   发表时间:2011-10-18  
kidneyball 写道
firefly_zp 写道

[quote="kidneyball"]什么是这里的“全局函数”呢?我们平时说的全局函数是指Global下提供的内置函数,但你这里说的好像不是这个意思。[/quote] 

 

 

                       var testVariable = function(){

name = "pluto" // 未用 var 声明,全局变量

var name = "pluto_local" // var 变量声明,局部变量

this.name = "xxPluto" // 对象属性,可以通过类来调用

this.height ="180";  // 对象属性,通过类来调用使用

// 下面声明一个全局函数(对内对外均可调用),age 前不带 var (这里就是一个全局函数)

age = function(a,b){

return a+b;

//infoOutput(); // 调用 infoOutPut 函数输出姓名,年龄。去掉最前方的 // 可以调用 infoOutput进行输出

}

var infoOutput = function(){

alert("Name: " + name);

alert("Age: " + age(3,4));

}

// 原型函数,类的对象可以调用它

testVariable.prototype.callProto= function(){   

  //只能访问:全局变量和全局函数   

  this.where = function(){   

// 下面name的输出为 xxPluto, 即 this.name 的值

alert("Where can we go? " + name);

callOutput();   

}   

 

var callOutput = function(){   

alert("callOutput name: " + name);  

// age = function(a,b) 现在为一个全局函数,可以尝试在 age 前面加入 var,则显示 age is not defined。

alert("callOutput age(10,12): " + age(10,12));

}   

 

var testInfo = new testVariable(); 

// 通过 “类的对象名+属性” 来调用对象属性的值,即上面 this.height = "180"

alert("height: "+testInfo.height); 

var newCall = new testInfo.callProto();   

//调用原型函数的实例函数   

newCall.where();

 

举了上面这么一个例子,希望可以帮助你理解。

 

你说的全局函数,怎么我看着像是一个取值为函数的全局变量呢。你的意思是,全局或局部,不是函数本身的性质,而是看谁引用了它?

 

并不是谁引用了他,而是看声明的时候是全局还是局部。即声明的位置,声明的方法等。

0 请登录后投票
   发表时间:2011-10-18  
waitingmyself 写道
psychopath 写道
JS真的不简单,给大家出个题,最后输出啥

   var scope = "testing";
      function test() {
        var scope = "global";
        return function() {
          var scope = "local";
          return new Function("return scope"); 
        }
      }

      test()()(); 

testing;
如果是return  function(){return scope};
就是 local了....


直接在firebug中运行得到“testing”
0 请登录后投票
   发表时间:2011-10-18  
感觉你的引用计数法的列子有问题,和你说的不同。
0 请登录后投票
   发表时间:2011-10-18   最后修改:2011-10-18
clue 写道

为什么不能比较开发效率?实现同样的业务逻辑,JS绝对比C、Java快,动态语言比静态语言灵活太多了
写JS不用考虑线程同步,可以灵活扩展,天生支持各种函数回调
NodeJs为什么流行?就是这个原因。

说JS运行依赖C明显有问题,顶多JS的解释器为了运行效率大多用C写的;同理于Java
但这对用JS开发有任何影响吗?


去查了下,很遗憾的告诉你,你为之推崇的Node是用C++编写的,C++的前身是谁就不用我说了吧。
现在你用运行在用在C基础上扩展出来的语言编写的平台上的JS跟C比较开发效率是不是有些可笑啊!

0 请登录后投票
   发表时间:2011-10-18  
psychopath 写道
clue 写道

为什么不能比较开发效率?实现同样的业务逻辑,JS绝对比C、Java快,动态语言比静态语言灵活太多了
写JS不用考虑线程同步,可以灵活扩展,天生支持各种函数回调
NodeJs为什么流行?就是这个原因。

说JS运行依赖C明显有问题,顶多JS的解释器为了运行效率大多用C写的;同理于Java
但这对用JS开发有任何影响吗?


去查了下,很遗憾的告诉你,你为之推崇的Node是用C++编写的,C++的前身是谁就不用我说了吧。
现在你用运行在用在C基础上扩展出来的语言编写的平台上的JS跟C比较开发效率是不是有些可笑啊!



你好像没搞清楚开发效率和运行效率的区别吧
0 请登录后投票
   发表时间:2011-10-18   最后修改:2011-10-18
kidneyball 写道

你好像没搞清楚开发效率和运行效率的区别吧


你误解我的意思了。

就nodejs这个问题上,js与C比较开发效率,有点类似PHP与C比较web程序的开发效率。
PHP本身用C写(至少大部分吧),你说php与C的谁的开发效率高?

开发效率也是相对于某个应用而言的。JS开发效率再高,跟C比较开发个操作系统,效率谁高呢?
0 请登录后投票
   发表时间:2011-10-18  
psychopath 写道
kidneyball 写道

你好像没搞清楚开发效率和运行效率的区别吧


你误解我的意思了。

就nodejs这个问题上,js与C比较开发效率,有点类似PHP与C比较web程序的开发效率。
PHP本身用C写(至少大部分吧),你说php与C的谁的开发效率高?

开发效率也是相对于某个应用而言的。JS开发效率再高,跟C比较开发个操作系统,效率谁高呢?


开发操作系统效率谁高我也不知道,你要问问写 http://www.masswerk.at/jsuix/ 那帮人。。。
不过还是没有搞清楚开发效率高跟谁用谁来写有什么关系呀

很多解释型语言出于运行效率考虑,是不会用自身来开发自身的解释器的,但不觉得这跟开发效率有什么关系呀。
0 请登录后投票
   发表时间:2011-10-18  
kidneyball 写道

开发操作系统效率谁高我也不知道,你要问问写 http://www.masswerk.at/jsuix/ 那帮人。。。
不过还是没有搞清楚开发效率高跟谁用谁来写有什么关系呀

很多解释型语言出于运行效率考虑,是不会用自身来开发自身的解释器的,但不觉得这跟开发效率有什么关系呀。


呵呵,解释型语言开发自己的解释器,那开发的解释器谁来解释呢?

0 请登录后投票
论坛首页 Web前端技术版

跳转论坛:
Global site tag (gtag.js) - Google Analytics