|
精华帖 (0) :: 良好帖 (1) :: 新手帖 (0) :: 隐藏帖 (3)
|
|
|---|---|
| 作者 | 正文 |
|
时间:2008-07-14
术语是个问题,老外也随便用的,大家可以心平气和的讨论嘛。
context在js中通常有两种用法。 一种是指execution context。 另一种是指function执行时,this所指向的对象(context object)。 虽然spec中只有第一种讲法,但是不表示说第二种讲法就是错误的。而且第一种说法其实很少用,因为通常我们直接说scope chain,而不大会说execution context。 |
|
| 返回顶楼 | |
|
时间:2008-07-14
英文说的随意点我也不反对 只是中文里带着英文名词还这样就难以容忍了
至于通常有两种说法云云就不用解释得这么做作了 context意思多了 用不着说标准一种 afcn0大人说的就是另一种吧? 最讨厌搞些名词骗新手的人 最后再提醒一下scope chain跟execution context不是一回事 好好读读标准再来讨论这些高级话题 |
|
| 返回顶楼 | |
|
时间:2008-07-14
"Execution Contexts
When control is transferred to ECMAScript executable code, control is entering an execution context. Active execution contexts logically form a stack. The top execution context on this logical stack is the running execution context." 执行环境 当js开始转到执行可运行代码的时候,这个时候js就创建了相应的执行环境.各种全局代码,局部函数运行形成的执行环境形成堆叠,最外面的就是当前执行代码段的执行环境 "Entering An Execution Context When control enters an execution context, the scope chain is created and initialised, variable instantiation is performed, and the this value is determined. The initialisation of the scope chain, variable instantiation, and the determination of the this value depend on the type of code being entered." 进入执行环境 当控制进入函数或代码段的执行环境时候,作用域链(scope chain)创建初始化,总的变量对象实例化,并且执行环境的this value被决定. 作用域链的初始化,变量的实例化,this value的确定取决于何种代码或函数被如何执行 以上大概解释清楚了 |
|
| 返回顶楼 | |
|
时间:2008-07-15
csf178 写道 英文说的随意点我也不反对 只是中文里带着英文名词还这样就难以容忍了
至于通常有两种说法云云就不用解释得这么做作了 context意思多了 用不着说标准一种 afcn0大人说的就是另一种吧? 最讨厌搞些名词骗新手的人 最后再提醒一下scope chain跟execution context不是一回事 好好读读标准再来讨论这些高级话题 咳,不要那么浮躁么。context object是很常见的说法,也不是afcn0或者我发明的,就算“搞些名词骗新手”那也是老外的问题。 我之所以指出这一点,是因为确实这两种说法比较容易让人混淆,比如写了js精髓绿皮书的aimingoo,他也曾经被这两个context给搞糊涂了:http://blog.csdn.net/aimingoo/archive/2006/01/25/587909.aspx。 还有,俺有说scope chain和execution context是一回事情么? 至于高级话题么,其实咬文嚼字肯定不算高级话题,这个或许可以吧:http://hax.javaeye.com/blog/103298 |
|
| 返回顶楼 | |
|
时间:2008-07-15
hax 写道 csf178 写道 英文说的随意点我也不反对 只是中文里带着英文名词还这样就难以容忍了
至于通常有两种说法云云就不用解释得这么做作了 context意思多了 用不着说标准一种 afcn0大人说的就是另一种吧? 最讨厌搞些名词骗新手的人 最后再提醒一下scope chain跟execution context不是一回事 好好读读标准再来讨论这些高级话题 咳,不要那么浮躁么。context object是很常见的说法,也不是afcn0或者我发明的,就算“搞些名词骗新手”那也是老外的问题。 我之所以指出这一点,是因为确实这两种说法比较容易让人混淆,比如写了js精髓绿皮书的aimingoo,他也曾经被这两个context给搞糊涂了:http://blog.csdn.net/aimingoo/archive/2006/01/25/587909.aspx。 还有,俺有说scope chain和execution context是一回事情么? 至于高级话题么,其实咬文嚼字肯定不算高级话题,这个或许可以吧:http://hax.javaeye.com/blog/103298 那个context 我没什么好说了 aimingoo也曾经被context搞糊涂了=>说明context真的有两种意思 对不? 那么我再说一遍 没人说context只有一种意思 context表示上下文、与...有关的背景环境这样的意思英文你随便怎么用 就好像我说中文一类XXX对象没人会非要把"类"当作class 挑毛病说这些XXX对象是不是属于同一class 但是既然特意在中文里面用了"context"和"scope对象"、"动态保存执行环境scope"这种看似来自标准文档的词,是不是出了骗骗新手之外没啥别的用了? 咬文嚼字确实不是啥高级话题,我没必要也没兴趣跟你们讨论技术问题,只是实在看不了误导性太强的言论,挑点最明显的错误而已。 最后说说你那高级话题,join有问题说得没错,不过循着地址看过去好像跟人家原来的主题没什么关系。 |
|
| 返回顶楼 | |
|
时间:2008-07-16
咳,都说了是讨论js时context比较常见的用法。而且当然是有特定所指。
一个常见用法是context object,也就是在函数执行时this所指向的对象。这个不是afcn或者aimingoo或者我说的,而是老外就是这样用的。请看http://developer.mozilla.org/en/docs/Core_JavaScript_1.5_Reference:Operators:Special_Operators:this_Operator。所以你最好直接把砖头向老外招呼(比如BE大人),俺没有意见。举aimingoo的例子只是说明,即使是js大牛也可能被这些词汇搞糊涂的。所以讨论的实质是搞清楚对方在说什么。即使用词不太合你口味也不必乱棒招呼。 标准中的execution context是个比较抽象的概念,在进入某个execution context时,会根据情况决定this的值,所以称之为context object倒是也不能说完全没有道理。 Rhino中的Context类是一个js引擎的具体实现的一部分,是把execution context概念映射到了一个具体实现类上,既然涉及特定实现,所以当然也包含了许多标准中所说的execution context的内涵之外的内容。 咬文嚼字完毕。 BTW,你如果从头看一遍就知道原来那个thread的讨论是围绕读spec展开的。我引出join的话题是说,spec也有问题的,而且spec确实写得很难读。对此,咱不必讳言,反正BE大人已经撇清过spec不是他写的。 |
|
| 返回顶楼 | |
|
时间:2008-07-16
希望关于文字问题讨论到此,最好回到本贴主题上
|
|
| 返回顶楼 | |
|
时间:2008-07-16
原来JE的各位大牛都是这么相互吹捧出来的 平时发帖带两句英文可以让新手觉得深不可测 被人看出来也可以互相引经据典帮着解释
"mozilla对于function默认执行aaa自己变量返回的特有对于eval产生scope当作context特殊对象有关" 看来我就不用说什么了 此处必然就是context的第三种用法了 看来我是听不懂各位的高论了 |
|
| 返回顶楼 | |
|
时间:2008-07-16
好,经过上面讨论,我从新写下那句话
" 看来SpiderMonkey引擎对于function当中引用了function外部scope chain里面任何一变量的函数对象,或者在函数内有进行eval操作的,会被js引擎视为为了函数的继续执行所以有必要保留scope chain对象,这种function在作为传递给eval第2参数时,eval回错误的把函数的scope chain对象当作第二参数对象,进而对于eval第一参数可执行代码文本的执行环境进行错误的with操作,把刚才提到的错误返回的function scope chain对象增加到执行环境里面scope chain里面的最前段,但是执行环境里面的this value不会变化,所以产生以上结果 " 所以 var aaa=123; var bbb=456; return { fn:function(){bbb} } 或 var aaa=123; var bbb=456; return { fn:function(a){eval(a)} } 或 var aaa=123; var bbb=456; return { fn:function(){bbb;return 123;} } 都会错误地执行 |
|
| 返回顶楼 | |
|
时间:2008-07-16
我其实觉得就是cs178写的"MOZ在打开ScopeChain优化的情况下设计这个参数实在是愚蠢",但是具体优化不怎么清楚,请帮助讲讲mozilla/js/src/jsobj.c里面关于优化的部分,对于c还是不是很了解
|
|
| 返回顶楼 | |





