JavaScriptでの使い方を詳しく解説_基礎知識

WBOY
リリース: 2016-05-16 17:16:59
オリジナル
1073 人が閲覧しました

1 つの文を覚えておく必要があります。これは常に、関数が実行されているオブジェクトを指します。関数が作成されたオブジェクトではなく。覚えておいてください...
この記事では、このオブジェクトが 3 つの状況でどこにあるかを分析します。
これは通常の関数でのことです
これがどこにあっても、最優先事項は、関数の実行中にその位置を見つけることです。

コードをコピー コードは次のとおりです:

1 var name="global";
2 function getName(){
3 var name="local";
4 return this.name;
5 };
6 alter(getName());

これがグローバル環境の関数 getName に出現する場合、関数 getName の実行時位置は
コードをコピー コードは次のとおりです:

alert(getName());

明らかに、関数 getName が配置されているオブジェクトはグローバル オブジェクトです。窓なので、これのホームは窓にあるはずです。このとき、this は window オブジェクトを指しているため、getName によって返される this.name は実際には window.name であるため、アラートは「グローバル」として出力されます。
では、これが地球環境の働きではなく局所環境の働きで現れる場合、どこに該当するのでしょうか?
コードをコピーします コードは次のとおりです:

1 var name="global";
2 var twobin={
3 name:"local",
4 getName:function(){
5 return this.name;
6 }
7 };
8alert(twobin.getName());

これが配置されている関数 getName はグローバル環境ではなく、twobin 環境にあります。これがどこにあっても、関数の実行中にその場所を見つける必要があります。このとき、関数 getName の実行時の位置
コードをコピー コードは次のとおりです:

alert(twobin. getName());

明らかに、関数 getName が配置されているオブジェクトは twobin なので、このホームは twobin にある必要があります。つまり、 twobin オブジェクトに追加した場合、getName によって返される this.name は実際には twobin 名であるため、アラートは「部分的」として出力されます。
これはクロージャです
クロージャは厄介な問題でもあります。この記事では、当面はこれについて詳しく説明しません。つまり、いわゆるクロージャとは、関数の中に別の関数を作成することです。外部変数にアクセスします。
放蕩息子、これには悪党の閉鎖が混ざっていて、決して平和が存在しないのは明らかです!
コードをコピー コードは次のとおりです:

1 var name="global";
2 var twobin={
3 name:"local",
4 getName:function(){
5 return function(){
6 return this.name;
7 } ;
8 }
9 };
10 alter(twobin.getName()());

現時点では、これは明らかに問題があり、実際にも問題が発生していますgetName 関数内の匿名 関数内で、匿名関数は変数名を呼び出し、クロージャを形成します。つまり、this はクロージャ内にあります。
これがどこであっても、関数の実行中に必ずその場所を見つけてください。このとき、関数getNameの実行時位置では判断できず、無名関数の実行時位置で判断します。
コードをコピー コードは次のとおりです。

function (){
return this .name;
};

明らかに、匿名関数が配置されているオブジェクトは window であるため、this のホームは window である必要があり、その場合、匿名関数によって返される this.name は次のようになります。実はwindow.nameなので注意 出てくるのは「全体像」です!
では、これをクロージャの twobin でどのように作成するのでしょうか?
コードをコピー コードは次のとおりです:

var name="global";
var twobin={
name:"local",
getName:function(){
var that=this;
return function(){
この時点で、getName 関数の実行時の位置は
alert(twobin.getName()); です。 🎜> これは twobin を指しますオブジェクトなので、これも twobin オブジェクトを指します。 that.name がクロージャの匿名関数で返される場合、このときに返される that.name は実際には twobin.name であるため、「ローカル」に警告を与えることができます。
This in call and apply
JavaScript でこれを制御できるのは call と apply だけです。
電話して応募してください。彼らはこの子を住まわせた場所ならどこにでも住むことになるので、従わなければなりません。



コードをコピーします


コードは次のとおりです:
var name="global"; var twobin ={name:"local",};function getName(){alert(this.name);
}
getName(twobin);
getName .call(twobin);


ここで、これは関数 getName 内にあります。これがどこにあっても、関数の実行中にその場所を見つける必要があります。このとき、関数 getName の実行時の位置は
getName(twobin);
当然、関数 getName が配置されているオブジェクトは window なので、このホームは window 内にある必要があります。つまり、ウィンドウ オブジェクトを指すと、getName はこれを返します。その名前は実際には window.name であるため、アラートは「グローバル」として出力されます。
それでは、電話して応募する番です。なぜなら、これは彼らの命令を聞かなければならないからです!
getName.call(twobin);
このうち、call は this のホームが twobin オブジェクトであることを指定します。これは強制的に twobin にのみ解決されるため、この時点では this は twobin オブジェクトを指します。 this.name 実際には twobin.name なので、アラートは「部分的」として表示されます。
少しまとめ
これは放蕩です: 関数が作成されたオブジェクトではなく、関数が実行されているオブジェクトを常に指します。それが匿名関数内にあるか、オブジェクト内にない場合、this は次を指します。 window オブジェクト。call または apply の場合、どのオブジェクトを指定するかは、そのオブジェクトを指します。
関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート