新着情報

HOME > 開発者ブログ > intra-mart > intra-martの変数宣言について(var, let, const)

intra-martの変数宣言について(var, let, const)

 

現在、JavaScriptの開発では変数を宣言する際に、

特別な理由がなければ「var」を使用すべきではないとされています。

JavaScript ES6から「let」「const」が追加されたからです。

 

intra-martにとっても無関係の話ではありません。

現在iAP標準のスクリプト開発プログラムでは、ほとんどの変数宣言が、「var」ではなく「let」によって行われています。

今回はiAP標準のスクリプトプログラムを元に、iAPでの変数宣言についてまとめます。

 

※iAP標準のスクリプトプログラムはテナントのデプロイ後、以下パスに配置されています。

resinインストールフォルダ/webapps/テナントID/WEB-INF/jssp/platform/src

iap_img

 

let

 

一般的な変数を宣言する際に使用します。

 

従来のvarによる宣言と異なり、ざっくりと以下の特徴があります。
・if文などのブロック内で使用した場合、そのブロック内でのみ参照できる。
・同ブロック内での再宣言はできない。(エラーになる)

 

iAP標準プログラムでは以下のように使用されています。

let loginUserCd = Contexts.getAccountContext().userCd;

 

const

 

代入のしない変数を宣言する際に使用します。

iAP標準プログラムでは以下のように使用されています。

const TIMELINE_TYPE_LIST = imbox.constants.TIMELINE_TYPE_LIST;

宣言時は一般的な定数定義のようにすべて全角文字+スネークケースで定義しています。
ただ、iAP標準プログラムではIMBOX関連のプログラム内でしか使用されておらず、
多くの標準プログラムでは、例えばメッセージ定義の宣言時であってもlet宣言が使用されています。
どの場合にconst宣言を使用するかについては開発チームで取り決めをするとよいでしょう。

 

var

 

letとの違いはletで記載した通りです。


iAP標準プログラムではグローバル変数を宣言する際に使用されていることがあります。
ただ、グローバル変数の宣言でも多くの場合let宣言が使用されています。

 

以上です。

過去のプログラム資源を変更してまで合わせる必要はないかもしれませんが、

各プログラム内でばらばらになっていると見た目も悪いため、

開発チームで方針を決めておくとよいでしょう。

 

おまけ

 

var, let の動作を簡単に検証したものです。


function init(request){
	test1();
	test2();
	Debug.browse(output);
}

let output = [];
function test1() {
	{
		let a = 1;
		let b = 1;
		var c = 1;
		var d = 1;
		{
			let a = 2;
			b = 2;
			var c = 2;
			d = 2;
			output.push('a1:' + a); // a1:2
			output.push('b1:' + b); // b1:2
			output.push('c1:' + c); // c1:2
			output.push('d1:' + d); // d1:2
		}
		output.push('a2:' + a); // a2:1 letは下位ブロック内で再宣言すると別の変数として扱われる
		output.push('b2:' + b); // b2:2 letは上位ブロックの宣言が下位ブロックから参照可能
		output.push('c2:' + c); // c2:2
		output.push('d2:' + d); // d2:2
	}
	output.push('a3:' + (typeof a !=='undefined' ? a : 'undefined')); // a3:undefined
	output.push('b3:' + (typeof b !=='undefined' ? b : 'undefined')); // b3:undefined
	output.push('c3:' + (typeof c !=='undefined' ? c : 'undefined')); // c3:2
	output.push('d3:' + (typeof d !=='undefined' ? d : 'undefined')); // d3:2
	// letは下位ブロックで宣言されると、上位ブロックでは参照不可。varは可能。
}

function test2() {
	output.push('a4:' + (typeof a !=='undefined' ? a : 'undefined')); // a4:undefined
	output.push('b4:' + (typeof b !=='undefined' ? b : 'undefined')); // b4:undefined
	output.push('c4:' + (typeof c !=='undefined' ? c : 'undefined')); // c4:undefined
	output.push('d4:' + (typeof d !=='undefined' ? d : 'undefined')); // d4:undefined
	// 関数外はlet、varともに参照不可
}

2017年06月13日(火)

テレマーケティングシステムsakuraトライアル

コールセンターシステム sakuraCTI

資料請求

お問合わせ

コラム

用語集

開発者ブログ

イントラマート

Sakuraテレマーケティングシステム

 

 

営業リスト

インフラソリューションのご案内

導入事例

テレアポノウハウ本プレゼントキャンペーン

認証マーク

アースリンクは
プライバシーマークを
取得しています。

プライバシーポリシー


SSLとは?

当サイトでは、実在性の証明とプライバシー 保護のためSSLサーバ証明書を使用しSSL 暗号化通信を実現しています。

このページの先頭へ