JavaScript変数宣言の事前処理
9034 ワード
先週の木曜日に昼食を食べて、leaderはJavaScriptのテーマを送って私たちに作ってくれました.私たちのチームの中にはフロントエンドを作ったり、バックグラウンドを作ったり、mobile webを作ったりしています.だから、みんなのテーマに対する理解はそれぞれ違います.それからQQ討論グループで討論します.発見は基礎的だが、討論を通じて多くの収穫を得た.もちろん開発経験のある開発者から見れば、これらはJavaScriptを学ぶ最も基礎的なものです.自分は普段からjQueryや第三JSコンポーネントを使っているので、JavaScriptの基礎学習をあまり重視していません.
次のコードを2回書いてくださいalertはそれぞれどんな結果を出力しますか?
私の答えは:1.undefined 2.undefined.そしてリーダーは質問の答えをもう一度よく考えてみましょう.私のテーマに対する分析:1.aを宣言して1に値を割り当て、aを再宣言しますが、この場合は値が割り当てられていません.その変数は宣言されていますが、値が割り当てられていないのでundefinedです.2.最初の行のb変数は、関数内でグローバル変数であり、ローカル変数を宣言しますが、値は割り当てられていません.alertにはグローバル変数bが出力されるのでundefiendでもある.
次のコードを2回書いてくださいalertはそれぞれどんな結果を出力しますか?
<script type="text/javascript">
var a = 1; var a; alert(typeof a); (function () { b = 'hello world'; var b; })(); alert( typeof b); </script>
私の答えは:1.undefined 2.undefined.そしてリーダーは質問の答えをもう一度よく考えてみましょう.私のテーマに対する分析:1.aを宣言して1に値を割り当て、aを再宣言しますが、この場合は値が割り当てられていません.その変数は宣言されていますが、値が割り当てられていないのでundefinedです.2.最初の行のb変数は、関数内でグローバル変数であり、ローカル変数を宣言しますが、値は割り当てられていません.alertにはグローバル変数bが出力されるのでundefiendでもある.
我自己在Chrome里面运行了一下代码,代码正确结果是1.number 2.undefined。这里考察的是JavaScript的变量声明提前概念。
test(); function test(){ alert("Hello World!"); }
実行結果は:Hello World!です.原理:コンピュータは文の実行を開始する前に、すべてのfunction定義を検索し、関連するfunctionを保存します.
解析結果:
第1題:var a=1;var a;
<!--
.csharpcode, .csharpcode pre
{
font-size: small;
color: black;
font-family: consolas, "Courier New", courier, monospace;
background-color: #ffffff;
/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt
{
background-color: #f4f4f4;
width: 100%;
margin: 0em;
}
.csharpcode .lnum { color: #606060; }
-->
2行目の宣言変数aは、上部でaを宣言したことに相当し、最初の文はaを再宣言し、1に値を付与する.だからtypeof aはnumber
第2題:b='hello world';var b;第二题解析:b='hello world',程序首先会在函数内部去查找是否有变量b的声明,如果有的话,直接赋值为'hello world'。但是alert( typeof b); 是在函数外面,输出的全局变量b,所有是undefined。
接着看如下代码段:
<script type="text/javascript"> name = "aaa"; function test() { alert(typeof name); var name = "bbb"; alert(typeof name); } test(); </script>
結果を書いてください.
解析は、次のコード・セグメントで記述できます.myname = "aaa"; function test() { alert(typeof myname); // myname , , 。 typeof myname undefined var myname=123;// alert(typeof myname);//number } test();
<!--
.csharpcode, .csharpcode pre
{
font-size: small;
color: black;
font-family: consolas, "Courier New", courier, monospace;
background-color: #ffffff;
/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt
{
background-color: #f4f4f4;
width: 100%;
margin: 0em;
}
.csharpcode .lnum { color: #606060; }
-->
しかし、次のコードセグメントでは、実行結果は何ですか?<script type="text/javascript"> alert(typeof name); var name = "hello world"; alert(typeof name); </script>
プログラムの実行結果はstring,stringです.原因は何ですか.
注意:園友との共同討論を通じて、結果が出た.最後にstringとstringが現れた結果については、確かにChromeブラウザがnameにname=""をデフォルトで付与しているため、出力された結果はstringです.ここでは、フロントエンド開発の過程で、CSSとHTMLの各ブラウザでの互換性に注目することが多いが、JavaScriptは各ブラウザで互換性の問題がある場合もある.
<!--
.csharpcode, .csharpcode pre
{
font-size: small;
color: black;
font-family: consolas, "Courier New", courier, monospace;
background-color: #ffffff;
/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt
{
background-color: #f4f4f4;
width: 100%;
margin: 0em;
}
.csharpcode .lnum { color: #606060; }
-->
<!--
.csharpcode, .csharpcode pre
{
font-size: small;
color: black;
font-family: consolas, "Courier New", courier, monospace;
background-color: #ffffff;
/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt
{
background-color: #f4f4f4;
width: 100%;
margin: 0em;
}
.csharpcode .lnum { color: #606060; }
-->
<!--
.csharpcode, .csharpcode pre
{
font-size: small;
color: black;
font-family: consolas, "Courier New", courier, monospace;
background-color: #ffffff;
/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt
{
background-color: #f4f4f4;
width: 100%;
margin: 0em;
}
.csharpcode .lnum { color: #606060; }
-->