javascript二つの思考

1806 ワード

javascript 2つの思考1.
http://www.jsforest.org/2010/07/29/js-this指向性の小さいテスト/
これはテストでthisの方向を指していますが、実際には変数のスコープをテストしています.
まずその中の二番の問題を話してください.oは対象です.doItはその方法です.doItのthisは自然にoを指します.
2番の結果は10のサスペンスです.
第一の問題を見てください.doItの内部にsetTimeout方法を追加しました.setTimeoutはまた匿名の方法を呼び出しました.
javascriptでは、関数(または方法)も対象であり、匿名の方法のthisはdoItを指すべきであり、結果は20である.
実際にコードをかけましたが、第一問の結果は5です.どこが間違っていますか?
問題はsetTimeoutにある.
window.setTimeout(code, delay)
When
code is executed,it is executed in the context of the Window object.If
code is a function,the Window object is the value of the this keyword.If
code is a string、it is evaluated in the global scope with the Window oject as the only object on the scope chain.This is true even the cal to setTimeout()occurred within a function with a longer scoper oper oper ope.chane.
この話は、setTimeoutがどこで実行されても、その役割領域はWindowの下であり、thisがWindowを指していることを示しています.
問題1のx=5はグローバル変数、Windowのスコープです.
この問題はthisの方向をテストしていると言っていますが、最終試験はsetTimeoutの問題です.
2.
http://www.css88.com/archives/2429
この問題を見て、まず気づいたのは初めて使いました.
==は、二つ目はないですが、javascriptは弱いタイプの言語で、provisionalTableを使って値を取ってもタイプを判断していません.そして、Objectの中に値があるかどうかを判断する方法を探してみました.例えば、provisionalTable.item、inなどはタイプを判断していません.考えてみますと、方法を積載しますが、これはどうやって積載しますか?一つのfunction考え方ではないです.数字はtoStringを利用して文字列に変換したものです.それではNumber.prototype.toString=function(){return this];6='6'はfalseに戻りましたが、provisionalTableはまだ同じ考えです.provisionalTableは同時に6と'6'が存在します.provisionalTableはこの2つを区別できます.provisionalTableにtrueとして設定されているものを入れたら、他のものも加えてfalseとします.しかし、これは効率的な問題があります.実際には、acsが提案した方法にはtypeof方法を加えただけで、効率的な損失が無くなります.この問題は解決方法を探すのではなく、一番いい方法を探すのです.うん、やめてください.効率の問題は私たちの子供が考えるべきものではないです.これは根本的にjavascriptを再構築しなければならないです.
でも考えてみると、いろいろなことを学ぶことができます.