Javascript にはプライベートおよびパブリックのアクセス権設定のキーワードがありませんが、特定の手法を使用して同じ結果をシミュレートできます。
まず、次のコード行を見てみましょう:
var i = (1, 2, 3)。 , 4 , 5);
変数 i の最終結果は 5 です。
これはカンマ演算子の結果であり、括弧はこのコード行の優先順位を変更することを意味します。それ以外の場合、var i = 1, 2, 3, 4, 5; は識別子が見つからないというエラーを報告します。
var i = (1, 2, 3, 4, function(){ return 5 * 5;});
変数 i の最終結果は、結果 25 を返す関数です。
これは、事前に宣言しなくても任意の型を割り当てることができる Javascript の柔軟性です。次の呼び出し:
i ();
alert( i() );
は 25 を返すメソッド呼び出しを取得します。
変数を続けます。 i は、代入演算子を介して関数の参照を取得します。つまり、等号の右側の括弧の演算後に返された最後の結果への参照は、呼び出しを表示することはできませんが、存在します。変数への参照なしで呼び出された場合はどうなりますか?コードが実行されると、メッセージ ボックスが表示され、25 が表示されます。
表示の便宜上、I 前の例の関数は、
2 組のかっこ () () のポップアップ メッセージ ボックスに変更されました。 ; 最初のペアは、結果が関数である場合、2 番目の括弧のペアによって呼び出しが行われることを示します。つまり、参照のために前の括弧のペアを介して匿名関数への参照が行われます。以下は匿名関数の呼び出しです。
匿名関数の使用方法の詳細については、記事の最後にある参考リンクを参照してください。
クロージャが生成される理由は次のとおりです。スコープが異なるため、子スコープは親スコープの変数を参照し、子スコープに戻ります。ただし、親スコープは実行後に破棄される必要がありますが、子スコープは常に存在し、子スコープへの参照を持っています。
次のコードを見てください
コードをコピーします
アラート(b);
}
}
親関数parentには子関数が含まれており、子関数には親関数のa変数への参照があります。
実行後に親関数が宣言された子関数を返せるようにしましょう
コードをコピーします
}
return child;
var t =parent()
t(); 10 行目親関数を実行し、関数内で宣言された子関数を返します。このとき、変数 t には返されたオブジェクト (この時点では実行可能な関数) への参照が保持されており、それを 11 行のコードで呼び出しました。結果はそれぞれ出力 1 と 2 です。
出力 2 はサブ関数本体で変数を宣言したためであり、出力 1 は関数本体で対応する変数 a を定義していないためです。交換が発生しました。親関数内の変数への参照、つまり親スコープ内の変数の参照は完了しています。つまり、変数 a はまだ存在しています。関数は実行されており、対応する参照がないため、直接参照することはできません (親 .a など)。返されたサブ関数の参照を介してのみアクセスできます。
他の変数を宣言した場合はどうなるでしょうか。結果は同じで、サブ関数にアクセスできますが、サブ関数が対応する参照を返さない場合、外部からはまったくアクセスできません。これはクロージャを形成します。 🎜>クロージャでできることは何ですか? 外部の世界に自由に変更されたくない変数がある場合は、
コードをコピー
myObj = {} //ウィンドウ オブジェクト (window. myObj)
(function(){
var i = 4;
myObj = { //グローバル変数を参照し、値を代入します
getI : function() { //メソッドを取得, a function
}
})(); //匿名関数の呼び出しも関数ですしたがって、これはサブスコープとして使用され、コード汚染を避けるために実行後に破棄されます
myObj.setI(5); //Success
myObj.setI(101); //Failure
alert( myObj.getI());
alert(myObj.i); //エラー、そのような属性はありません
これまでは、パブリック アクセス権とプライベート アクセス権 (つまり、必要なものを提供し、提供したくないものは提供しない) を実装しただけです。
In ページでは、通常、document.cookie 属性を使用してアクセスします。これに新しい値を割り当てると、Cookie には通常、値 (保存された値)、日付 (時刻) の 5 つの属性があります。 UTC形式で、何を表すのか) 有効期限、ドメイン(ドメイン、Cookie所有者)、パス(サブディレクトリ)
通常の開発では、document.cookie属性だけでアクセスすると非常に面倒になりますが、文字列にのみ文字を割り当てることができ、指定された変数名の値を取得するには、読み取り後に文字列を切り取る必要があるため、document.cookie を読み取ると、有効期限などの情報を除いて、割り当てられたすべての値が返されます。
コードは以下に添付されており、すべて Cookie グローバル オブジェクトにカプセル化されており、いくつかのメソッドが公開されています。
Get: 指定されたすべての Cookie 文字列を元に戻します。 Cookie 文字列を設定します。
Clear: すべての Cookie オブジェクトをクリアします。
Write: オーバーロードされた Cookie を参照します。 : Cookie をクエリします。詳細については、コードを参照してください。
コードをコピーします
Cookie = {};
/*
* Date オブジェクトの setTime メソッドは、1970-01-01 からのミリ秒数を設定し、オブジェクトに設定して、それ以降の日付 元のオブジェクトではなくミリ秒数。
* Cookie が期限切れ属性を設定していない場合、または有効期限が現地時間より短い場合、次回の閲覧時に期限切れになります。
* document.cookie オブジェクトは、有効期限などを含まないすべての値を文字列形式で返します。 🎜>var isString = function(v ) {
return typeof v === "string";
}
var isArray = function(v) {
return Object.prototype.toString.apply( v) == "[オブジェクト配列]";
}
var isObject = function(v) {
return v && typeof v == "object";
var isDate = function(v) {
return Object.prototype.toString.apply(v) == "[オブジェクト日付]";
var getTime = function() {
return new Date() .getTime();
}
var trim = function(val) {
return (val || "").replace(/^s |s $/g, ""); }
var tryEval = function (val) {
var Obj, e;
try {
Obj = eval(val)
} catch (e) {
Obj = val ;
}
return Obj;
}
var ObjectToString = function(o) {
var tstr = "{";
if (isArray(o[v] )) {
tstr = v ":" ArrayToString(o[v]) ",";
} else if (isObject(o[v])) {
tstr = v ":" ObjectToString( o[v]) ",";
} else if (isString(o[v])) {
tstr = v ":"" o[v].toString( ) "",";
} else {
tstr = v ":" o[v].toString() ",";
}
}
return tstr.slice(0 , -1) "}";
}
var ArrayToString = function(o) {
var tstr = "[";
for (var v in o) {
if (isArray (o[v])) {
tstr = ArrayToString(o[v]) ",";
} else if (isObject(o[v])) {
tstr = ObjectToString(o[v] ]) ",";
} else {
tstr = o[v].toString() ",";
}
}
return tstr.slice(0, -1) "]";
}
Cookie = {
Get: function() {
return document.cookie;
Set: function(val) {
document.cookie = val;
},
Clear: function() {
var temp = this.Query()
for (o in temp); >this.Delete(o);
}
},
GetDayTime: function(val) {
var texires = new Date();
texires.setTime() val * nDay);
return texires;
書き込み: function() {
/*
* Cookie.Write(Object); >* Cookie.Write(varname , Object); varname: 変数名、Object: 書き込みオブジェクト;
* Cookie.Write(Object, Date);
* Cookie。 Write(varname, Object , Date); varname: 変数名, オブジェクト: 書き込みオブジェクト, 日付: 有効期限; Cookie.Write(varname, Object, Date, Domain, Path);オブジェクトの書き込み、日付: 有効期限、ドメイン: ドメイン、パス: サブディレクトリ;
*/
if (arguments.length == 1) {
var tvalue = argument[0]; = " ";
var texires = new Date(); texpires.setTime() 1 * nDay);
if (isArray(tvalue)) {
tstr = ArrayToString(tvalue);
} else if (isObject(tvalue)) {
tstr = ObjectToString(tvalue);
} else {
tstr = tvalue.toString();
tstr = " main= "escape(tstr) ";expires="texpires.toGMTString() ";";
} else if (arguments.length == 2) {
var tname, tvalue, texires, tstr = "" ;
if (isDate(arguments[1])) {
tname = "main";
tvalue = argument[1]; else {
tname = 引数[0];
tvalue = 引数[1];
texpires.setTime() 1 * nDay); >if (isArray(tvalue)) {
tstr = ArrayToString(tvalue);
} else if (isObject(tvalue)) {
tstr = ObjectToString(tvalue); else {
tstr = tvalue.toString();
}
tstr = tname "="scape(tvalue) ";expires=" texpires.toGMTString() ";"
} else if (arguments.length == 3) {
var tname = argument[0], tvalue = argument[1], texpires = argument[2], tstr = "";
if (isArray(tvalue)) {
tstr = ArrayToString (tvalue);
} else if (isObject(tvalue)) {
tstr = ObjectToString(tvalue);
} else {
tstr = tvalue.toString();
tstr = tname "="scape(tvalue) ";expires=" texpires.toGMTString() ";";
} else if (arguments.length == 5) {
var tname = argument[ 0] 、tvalue = 引数[1]、texpires = 引数[2]、tdomain = 引数[3]、tpath = 引数[4]、tstr = "";
if (isArray(tvalue)) {
tstr = ArrayToString(tvalue);
} else if (isObject(tvalue)) {
tstr = ObjectToString(tvalue);
} else {
tstr = tvalue.toString(); }
tstr = tname "="scape(tvalue) ";expires=" texpires.toGMTString() ";domain=" tdomain ";path=" tpath ";";
}
alert(tstr) );
this.Set(tstr)
},
Query: function() {
/*
* Cookie.Query(); すべての Cookie 値で構成されるオブジェクトを返します。指定された名前; 失敗した場合は、未定義を返します。 Cookie.Query(string, Object); 失敗した場合は、指定された名前のオブジェクトを返します。 /
var tname = tvalue = " ", tright = -1;
var tstr = this.Get();
var tObj = {}; {
var i = 0;
do {
tname = trim(tstr.slice(i, tstr.indexOf("=", i))); ;", i);
if (tright == -1) {
tvalue = unescape(tstr.slice(tstr.indexOf("=, i) 1, tstr.length));
} else {
tvalue = unescape( tstr.slice(tstr.indexOf("=, i) 1, tright));
}
tObj[tname] = tryEval(tvalue); i = tstr.indexOf(";", i) == -1 ? -1 : tstr.indexOf(";", i) 1; while (i != -1); {
tname = argument[0] ;
if (tstr.indexOf(tname) == -1) 戻り値
var i = tstr.indexOf(tname); tstr.slice(i, tstr.indexOf( "=, i)));
tright = tstr.indexOf(";", tstr.indexOf(tname)) == tstr.length : tstr ? IndexOf(";", tstr.indexOf(tname));
tvalue = unescape(tstr.slice(tstr.indexOf(tname) tname.length 1, tright)); 1) {
tObj = tryEval( tvalue);
} else if (arguments.length == 2) {
tObj = argument[1];
tObj[tname] = tryEval(tvalue) ;
}
}
return
},
Update: function() {
return this.Write.apply(this, argument); 🎜>削除: function() {
if (arguments.length == 1) {
var varname = argument[0];
if (this.Query(varname)) {
this. Update(varname, "", new Date(1970, 01, 01));
}
}
}
}
実行があります文字列からオブジェクトへの eval を実行し、Object または Array オブジェクトから対応する関数を文字列の形式で取得し、一部の JSON 操作をシミュレートします。もちろん、すべての JavaScript オブジェクトを保存することはできず、一部のみが満たされます。
私の個人的な理解には限界があるので、アドバイスをお願いします。
JavaScript の匿名関数:
http://dancewithnet.com/2008/ 05/07/javascript-anonymous-function/
JavaScript 閉鎖:
Cookie ファイル形式:
http://www.cnblogs.com/sephil/archive/2008/05/06/cookiefmt.html

PythonとJavaScriptの主な違いは、タイプシステムとアプリケーションシナリオです。 1。Pythonは、科学的コンピューティングとデータ分析に適した動的タイプを使用します。 2。JavaScriptは弱いタイプを採用し、フロントエンドとフルスタックの開発で広く使用されています。この2つは、非同期プログラミングとパフォーマンスの最適化に独自の利点があり、選択する際にプロジェクトの要件に従って決定する必要があります。

PythonまたはJavaScriptを選択するかどうかは、プロジェクトの種類によって異なります。1)データサイエンスおよび自動化タスクのPythonを選択します。 2)フロントエンドとフルスタック開発のためにJavaScriptを選択します。 Pythonは、データ処理と自動化における強力なライブラリに好まれていますが、JavaScriptはWebインタラクションとフルスタック開発の利点に不可欠です。

PythonとJavaScriptにはそれぞれ独自の利点があり、選択はプロジェクトのニーズと個人的な好みに依存します。 1. Pythonは、データサイエンスやバックエンド開発に適した簡潔な構文を備えた学習が簡単ですが、実行速度が遅くなっています。 2。JavaScriptはフロントエンド開発のいたるところにあり、強力な非同期プログラミング機能を備えています。 node.jsはフルスタックの開発に適していますが、構文は複雑でエラーが発生しやすい場合があります。

javascriptisnotbuiltoncorc;それは、解釈されていることを解釈しました。

JavaScriptは、フロントエンドおよびバックエンド開発に使用できます。フロントエンドは、DOM操作を介してユーザーエクスペリエンスを強化し、バックエンドはnode.jsを介してサーバータスクを処理することを処理します。 1.フロントエンドの例:Webページテキストのコンテンツを変更します。 2。バックエンドの例:node.jsサーバーを作成します。

PythonまたはJavaScriptの選択は、キャリア開発、学習曲線、エコシステムに基づいている必要があります。1)キャリア開発:Pythonはデータサイエンスとバックエンド開発に適していますが、JavaScriptはフロントエンドおよびフルスタック開発に適しています。 2)学習曲線:Python構文は簡潔で初心者に適しています。 JavaScriptの構文は柔軟です。 3)エコシステム:Pythonには豊富な科学コンピューティングライブラリがあり、JavaScriptには強力なフロントエンドフレームワークがあります。

JavaScriptフレームワークのパワーは、開発を簡素化し、ユーザーエクスペリエンスとアプリケーションのパフォーマンスを向上させることにあります。フレームワークを選択するときは、次のことを検討してください。1。プロジェクトのサイズと複雑さ、2。チームエクスペリエンス、3。エコシステムとコミュニティサポート。

はじめに私はあなたがそれを奇妙に思うかもしれないことを知っています、JavaScript、C、およびブラウザは正確に何をしなければなりませんか?彼らは無関係であるように見えますが、実際、彼らは現代のウェブ開発において非常に重要な役割を果たしています。今日は、これら3つの間の密接なつながりについて説明します。この記事を通して、JavaScriptがブラウザでどのように実行されるか、ブラウザエンジンでのCの役割、およびそれらが協力してWebページのレンダリングと相互作用を駆動する方法を学びます。私たちは皆、JavaScriptとブラウザの関係を知っています。 JavaScriptは、フロントエンド開発のコア言語です。ブラウザで直接実行され、Webページが鮮明で興味深いものになります。なぜJavascrを疑問に思ったことがありますか


ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

Video Face Swap
完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

人気の記事

ホットツール

VSCode Windows 64 ビットのダウンロード
Microsoft によって発売された無料で強力な IDE エディター

Dreamweaver Mac版
ビジュアル Web 開発ツール

mPDF
mPDF は、UTF-8 でエンコードされた HTML から PDF ファイルを生成できる PHP ライブラリです。オリジナルの作者である Ian Back は、Web サイトから「オンザフライ」で PDF ファイルを出力し、さまざまな言語を処理するために mPDF を作成しました。 HTML2FPDF などのオリジナルのスクリプトよりも遅く、Unicode フォントを使用すると生成されるファイルが大きくなりますが、CSS スタイルなどをサポートし、多くの機能強化が施されています。 RTL (アラビア語とヘブライ語) や CJK (中国語、日本語、韓国語) を含むほぼすべての言語をサポートします。ネストされたブロックレベル要素 (P、DIV など) をサポートします。

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール
