<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ThinkChat2.0新版上線,更智能更精彩,支持會話、畫圖、視頻、閱讀、搜索等,送10W Token,即刻開啟你的AI之旅 廣告
                ~~~ var b = 10; (function b(){ b = 20; console.log(b); })(); ~~~ ~~~js var b = 10; (function b() { // 內部作用域,會先去查找是有已有變量b的聲明, //有就直接賦值20,確實有了呀。發現了具名函數 function b(){},拿此b做賦值; // IIFE的函數無法進行賦值(內部機制,類似const定義的常量),所以無效。 // (這里說的“內部機制”,想搞清楚,需要去查閱一些資料, //弄明白IIFE在JS引擎的工作方式,堆棧存儲IIFE的方式等) b = 20; console.log(b); // [Function b] console.log(window.b); // 10,不是20 })(); ~~~ 所以嚴格模式下能看到錯誤:`Uncaught TypeError: Assignment to constant variable` ~~~js var b = 10; (function b() { 'use strict' b = 20; console.log(b) })() // "Uncaught TypeError: Assignment to constant variable." ~~~ 其他情況例子: 有`window`: ~~~js var b = 10; (function b() { window.b = 20; console.log(b); // [Function b] console.log(window.b); // 20是必然的 })(); ~~~ 有`var`: ~~~js var b = 10; (function b() { var b = 20; // IIFE內部變量 console.log(b); // 20 console.log(window.b); // 10 })(); ~~~ ## 解答 1)打印10 ~~~ var b = 10; (function b(b) { window.b = 20; console.log(b) })(b) //或者 var b = 10; (function b(b) { b.b = 20; console.log(b) })(b) ~~~ 2)打印20 ``` var b = 10; (function b(b) { b = 20; console.log(b) })(b) // 或 var b = 10; (function b() { var b = 20; console.log(b) })() ``` ## 解釋 > 打印10的第一種方法:b已經作為參數被傳進函數里去了, > 即使函數內使用`window.b = 20;`改變了全局的b也已經對它沒有影響了, 所以會打印出原先的10。 ?? ``` var b = 10; (function b(b) { console.log(b) //10 })(b) ``` > 打印20的第一種方法:函數里的b并不是全局的b,修改它也不會影響到全局的b。 ? > 基本數據類型的傳遞只是傳遞數值,比如此處不管你修改的是函數外的b還是函數內的b都不會對對方造成影響。對象的傳遞才是按引用傳遞,一個變了全部都要變,可以了解一下js里關于基本數據類型和引用數據類型內存空間的存儲方式。 ## 摘自 [ 簡單改造下面的代碼,使之分別打印 10 和 20](https://github.com/Advanced-Frontend/Daily-Interview-Question/issues/51) [ 第 33 題:下面的代碼打印什么內容,為什么?](https://www.muyiy.cn/question/js/33.html) [ 在JavaScript的立即執行的具名函數A內修改A的值時到底發生了什么?](https://segmentfault.com/q/1010000002810093)
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看