Hatena::Groupjavascript

JavaScriptで遊ぶよ

 | 

2009-01-17

関数代入後の元関数の変更

16:12

javascript:var a=function(){alert(0)};var b=a;var a=function(){alert(1)};b()
// ->  0
javascript:var a=function(){alert(0)};var b=a;var a=function(){alert(1)};alert(a==b)
// ->  false

これ前にどっかで読んだんだけど、すっかり忘れてた。

グローバル変数へのアクセスの続き

16:20

前回→グローバルな変数・関数へのアクセス - 続けるかもしれないしすぐやめるかもしれない - g:javascript

javascript: 
var a; 
(function() {
  var t = new Date().getTime();
  for (var i = 0; i < 1000000; i++) a;
  alert(new Date().getTime() - t)
})();

130ms

javascript: 
var a; 
(function() {
  var t = new Date().getTime();
  for (var i = 0; i < 1000000; i++) window.a;
  alert(new Date().getTime() - t)
})();

1774ms (!!)

なんで?? プロトタイプチェーンを上らなくてもいいから速くなると思ったんだけど。

inspect

03:10

こういう関数を何回も書いてる気がするので。

function inspect(obj){var a=[];for(i in obj){var e=obj[i],t=(typeof e),b=(t=='function')?t:e;a.push(i+' : '+b)}return a}

Firefox、Safariでは問題ない。しかし Opera では、

alert(inspect(window).join('\n'))

こうすると失敗する。

window.java
window.netscape
window.sun
window.Packages

などというオブジェクトを参照しようとして、

The object does not implement [[call]]

というエラーを返されてしまう。

window 以外のオブジェクトなら大丈夫なはず。

トラックバック - http://javascript.g.hatena.ne.jp/edvakf/20090117
 |