锁定老帖子 主题:Javascript 垃圾收集机制
精华帖 (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了.... |
|
返回顶楼 | |
发表时间: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();
举了上面这么一个例子,希望可以帮助你理解。
你说的全局函数,怎么我看着像是一个取值为函数的全局变量呢。你的意思是,全局或局部,不是函数本身的性质,而是看谁引用了它? |
|
返回顶楼 | |
发表时间: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();
举了上面这么一个例子,希望可以帮助你理解。
你说的全局函数,怎么我看着像是一个取值为函数的全局变量呢。你的意思是,全局或局部,不是函数本身的性质,而是看谁引用了它?
并不是谁引用了他,而是看声明的时候是全局还是局部。即声明的位置,声明的方法等。 |
|
返回顶楼 | |
发表时间: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” |
|
返回顶楼 | |
发表时间:2011-10-18
感觉你的引用计数法的列子有问题,和你说的不同。
|
|
返回顶楼 | |
发表时间:2011-10-18
最后修改:2011-10-18
clue 写道 为什么不能比较开发效率?实现同样的业务逻辑,JS绝对比C、Java快,动态语言比静态语言灵活太多了 写JS不用考虑线程同步,可以灵活扩展,天生支持各种函数回调 NodeJs为什么流行?就是这个原因。 说JS运行依赖C明显有问题,顶多JS的解释器为了运行效率大多用C写的;同理于Java 但这对用JS开发有任何影响吗? 去查了下,很遗憾的告诉你,你为之推崇的Node是用C++编写的,C++的前身是谁就不用我说了吧。 现在你用运行在用在C基础上扩展出来的语言编写的平台上的JS跟C比较开发效率是不是有些可笑啊! |
|
返回顶楼 | |
发表时间:2011-10-18
psychopath 写道 clue 写道 为什么不能比较开发效率?实现同样的业务逻辑,JS绝对比C、Java快,动态语言比静态语言灵活太多了 写JS不用考虑线程同步,可以灵活扩展,天生支持各种函数回调 NodeJs为什么流行?就是这个原因。 说JS运行依赖C明显有问题,顶多JS的解释器为了运行效率大多用C写的;同理于Java 但这对用JS开发有任何影响吗? 去查了下,很遗憾的告诉你,你为之推崇的Node是用C++编写的,C++的前身是谁就不用我说了吧。 现在你用运行在用在C基础上扩展出来的语言编写的平台上的JS跟C比较开发效率是不是有些可笑啊! 你好像没搞清楚开发效率和运行效率的区别吧 |
|
返回顶楼 | |
发表时间:2011-10-18
最后修改:2011-10-18
kidneyball 写道 你好像没搞清楚开发效率和运行效率的区别吧 你误解我的意思了。 就nodejs这个问题上,js与C比较开发效率,有点类似PHP与C比较web程序的开发效率。 PHP本身用C写(至少大部分吧),你说php与C的谁的开发效率高? 开发效率也是相对于某个应用而言的。JS开发效率再高,跟C比较开发个操作系统,效率谁高呢? |
|
返回顶楼 | |
发表时间:2011-10-18
psychopath 写道 kidneyball 写道 你好像没搞清楚开发效率和运行效率的区别吧 你误解我的意思了。 就nodejs这个问题上,js与C比较开发效率,有点类似PHP与C比较web程序的开发效率。 PHP本身用C写(至少大部分吧),你说php与C的谁的开发效率高? 开发效率也是相对于某个应用而言的。JS开发效率再高,跟C比较开发个操作系统,效率谁高呢? 开发操作系统效率谁高我也不知道,你要问问写 http://www.masswerk.at/jsuix/ 那帮人。。。 不过还是没有搞清楚开发效率高跟谁用谁来写有什么关系呀 很多解释型语言出于运行效率考虑,是不会用自身来开发自身的解释器的,但不觉得这跟开发效率有什么关系呀。 |
|
返回顶楼 | |
发表时间:2011-10-18
kidneyball 写道 开发操作系统效率谁高我也不知道,你要问问写 http://www.masswerk.at/jsuix/ 那帮人。。。 不过还是没有搞清楚开发效率高跟谁用谁来写有什么关系呀 很多解释型语言出于运行效率考虑,是不会用自身来开发自身的解释器的,但不觉得这跟开发效率有什么关系呀。 呵呵,解释型语言开发自己的解释器,那开发的解释器谁来解释呢? |
|
返回顶楼 | |