私は時々この問題に出会いましたが、それが何が原因なのかまだわかりません。
このスクリプトはページにあります:
$(function(){
var value = "10";
});
しかし、ブラウザーには「ReferenceError:value is not defined」と表示されます。ただし、ブラウザコンソールに移動して次のいずれかを入力すると
10
または
var value = "10";
どちらも10を返すことができます。スクリプトの問題は何ですか?
編集:「var」を取り除くだけで問題を解決できます。
クロージャ内で宣言されているため、そこにしかアクセスできません。グローバルにアクセス可能な変数が必要な場合は、var
を削除できます。
$(function(){
value = "10";
});
value; // "10"
これは、window.value = "10";
。
変数は、定義したスコープ内でのみ使用できます。関数内で変数を定義すると、その変数の外部からアクセスできなくなります。
関数の外側(そしてもちろんその前)でvar
を使用して変数を定義し、関数内で_10
_を割り当てます:
_var value;
$(function() {
value = "10";
});
console.log(value); // 10
_
このコードの最初の行(_var value;
_)を省略しないでください。そうしないと、未定義の変数に値を割り当てることになります。これはコーディングの習慣が悪く、厳格モードでは機能しません。変数(_var variable;
_)の定義と変数(_variable = value;
_)への値の割り当ては、2つの異なるものです。定義していない変数に値を割り当てることはできません。
ここでは関係ないかもしれませんが、$(function() {})
は$(document).ready(function() {})
のショートカットで、ドキュメントが読み込まれるとすぐに関数を実行します。すぐに実行したい場合は必要ありません。そうでない場合は、DOMがロードされる前に実行すると、ロードされるまで値がundefined
になるため、console.log(value);
が配置されます。 $(function() {})
の直後はundefined
を返します。つまり、次の順序で実行されます。
_var value;
console.log(value);
value = "10";
_
こちらもご覧ください:
次のコードでエラーを取得しました(関数initで)。
"use strict" ;
var hdr ;
function init(){ // called on load
hdr = document.getElementById("hdr");
}
...サムスンギャラクシーフェイム(優れたテスターになっているがらくた電話)でストックブラウザを使用している間-userAgent; Mozilla/5.0(Linux; U; Android 4.1.2; en-gb; GT-S6810P Build/JZO54K)AppleWebKit/534.30(KHTML、Geckoなど)バージョン/4.0 Mobile Safari/534.30
同じコードは、古いHTC電話のuserBrowserを含む、私が試した他のすべての場所で機能します。 Mozilla/5.0(Linux; U; Android 2.3.5; en-gb; HTC_WildfireS_A510e Build/GRJ90)AppleWebKit/533.1(KHTML、Geckoなど)バージョン/4.0 Mobile Safari/533.1
これに対する修正は変更することでした
var hdr ;
に
var hdr = null ;