国产成人精品久久免费动漫-国产成人精品天堂-国产成人精品区在线观看-国产成人精品日本-a级毛片无码免费真人-a级毛片毛片免费观看久潮喷

您的位置:首頁技術文章
文章詳情頁

javascript - 關于具名的IIFE內部對函數自身再賦值問題?

瀏覽:104日期:2023-09-09 09:30:01

問題描述

+function foo(){foo=10;//我的問題代碼 console.log(foo);//方法自己}();console.log(typeof foo);//undefined 觀察是否全局污染

我想問 函數foo內部對foo再賦值的這個10去哪了,還有同名函數foo是如何阻止全局污染的,求解求擴展

問題解答

回答1:

題主能問這個,可以的.不過這題能通過自己實踐解決掉...

首先題主對于IIFE的寫法沒問題,IIFE的寫法好多,常見的就是@ewind說的這個和:

(function(){}())

還有不常見的:

!function(){ /* code */ }();~function(){ /* code */ }();-function(){ /* code */ }();+function(){ /* code */ }();

然后再說代碼:在函數里給當前函數名賦值時:foo = 10; 無效.(贊同@ewind,這里會忽略,應該有更合理的說法.)JS解析器會忽略掉它.我在Chrome控制臺執行的結果是:

function foo(){ foo=10;//我的問題代碼 console.log(foo);//方法自己}undefined// 上面typeof foo的結果

這就證明了上面我說的忽略.然后因為IIFE模擬了塊作用域,外部環境訪問不了內部的變量.所以就是undefined.

@ewind說因為foo是匿名函數然后怎樣怎樣.明顯概念搞混了.foo函數并不是匿名函數.

function [name]([param] [, param] [..., param]) { statements }name函數名,可以省略。當省略函數名的時候,該函數就成為了匿名函數。

MDN

回答2:

首先,貼出的代碼是不完整的。完整版應該是這樣

(function foo(){ foo = 10 console.log(foo) // [Function: foo]})();console.log(typeof foo) // undefined

這確實看起來比較反直覺,因為沒有采用 var 聲明的 foo 并沒有污染全局作用域。

但如果函數內聲明的變量名不是 foo,就很符合直覺了,如下:

var bar = 1;(function foo(){ bar = 10})();console.log(typeof foo) // undefinedconsole.log(bar) // 10

所以為什么函數內聲明的變量和函數名同名時,會發生問題呢?可以看這個示例:

(function foo(){ console.log(foo) // [Function: foo] console.log(arguments.callee) // [Function: foo] console.log(foo === arguments.callee) // true})();

在立即執行的函數帶有 foo 這一函數名后,調用時的 arguments.callee 其實就是對 foo 的引用了。比較二者可以發現此時 foo 就是函數對象。此時賦值操作并不能生效,遇到未加 var 聲明的 foo 變量時,解釋器查找到的也是這個函數對象,從而不會在全局作用域下產生污染。

標簽: JavaScript
相關文章:
主站蜘蛛池模板: 亚洲精品久久久久久久福利 | 久草中文在线视频 | 高清精品一区二区三区一区 | a级做爰视频免费观看 | 久久精品视频免费 | a级国产乱理伦片在线 | 不卡一区二区在线 | 91精品久久久 | 91四虎国自产在线播放线 | 在线a网站 | 久久久国产亚洲精品 | 日韩中文在线观看 | 久久免费香蕉视频 | 成人精品视频在线观看 | avtt天堂网 手机资源 | 精品久久香蕉国产线看观看亚洲 | 成人高清无遮挡免费视频软件 | 欧美在线观看成人高清视频 | 精品国产免费观看 | 亚洲国产人成中文幕一级二级 | 国内自拍欧美 | 精品国产一区二区三区在线观看 | 精品国产无限资源免费观看 | 日韩成人在线观看视频 | 日韩一区二区在线视频 | 久久久久久91 | 美女视频黄色网址 | 91久久夜色精品国产网站 | 日韩精品一区二区三区在线观看 | 久久精品免费观看久久 | 亚洲天堂男人 | 成人午夜视频免费观看 | 久久精品国产欧美日韩99热 | 日本一级在线播放线观看免 | 9cao在线精品免费 | 精品一区二区三区中文字幕 | 欧美成人性色xxxx视频 | 爽爽窝窝午夜精品一区二区 | 国产一二三区在线观看 | 久久草在线视频免费 | 免费观看性欧美一级 |