JavaScript を使用する場合、次のように関数の括弧内に何かを入れると:
<button onclick="myFunction('Hello')">Click Here!</button>
そしてJSで:
function myFunction(i);
実行するとすぐに定義var i = "Hello"
されますか、それとも何か他のものですか?
JavaScript を使用する場合、次のように関数の括弧内に何かを入れると:
<button onclick="myFunction('Hello')">Click Here!</button>
そしてJSで:
function myFunction(i);
実行するとすぐに定義var i = "Hello"
されますか、それとも何か他のものですか?
実行されるとすぐに var i = "Hello" を定義しますか、それとも何か他のものですか?
呼び出しが発生すると、値 "Hello"
が関数に渡され、関数は という引数を使用してそれを受け取りますi
。したがって、関数コード内で を参照するi
と、 value が得られます"Hello"
。
あなたの例では、ユーザーがボタンをクリックすると呼び出しが発生しますonclick
。これは、そのクリックにより、定義した属性のコードがトリガーされるためです。
あなたのコードで:
<button onclick="myFunction('Hello')">Click Here!</button>
function myFunction(i) {
alert(i); // display the i value on this case «Hello»
}
«i»は関数のパラメータ/引数です
hello bybyeを変更すると、i値は関数でのみ«bye»になります
<button onclick="myFunction('Bye')">Click Here!</button>
function myFunction(i) {
alert(i); // display «Bye»
}
alert(i); // outside the function i is undefined ;)
ドキュメントから
すべての実行コンテキストには、VariableEnvironmentが関連付けられています。実行コンテキストで評価されたECMAScriptコードで宣言された変数と関数は、そのVariableEnvironmentの環境レコードにバインディングとして追加されます。関数コードの場合、パラメーターもその環境レコードへのバインディングとして追加されます。
完全なドキュメントについては、http://ecma-international.org/ecma-262/5.1/#sec-10.5を参照してください。
var i = "hello";
つまり、実行コンテキストのVariableEnviromentの同じエントリに対応するため、バインディングと同等です。
次の手順を実行すると、これが実際に動作していることがわかります。
function hello(i) {
var i ="no hello";
console.log(arguments[0]);
}
hello("hi")
>>"no hello"