當前位置:編程學習大全網 - 熱門推薦 - js嚴格模式為什麽要禁用callee

js嚴格模式為什麽要禁用callee

早起版本的 JavaScript 沒有具名函數表達式(named function expression),所以在函數表達式裏麽沒有辦法實現遞歸。

比如下面實現階乘的函數:

function?factorial?(?n?)?{

return?!(?n?>?1?)1?:?factorial(?n?-?1?)?*?n;}[1,2,3,4,5].map(factorial);

如果寫成函數表達式的話:

[1,2,3,4,5].map(?function(?n?)?{

//?這裏要怎樣遞歸?

}?);

所以添加了 arguments.callee 來實現對執行函數本身的調用:

[1,2,3,4,5].map(?function(?n?)?{

return?!(?n?>?1?)1?:?arguments.callee(?n?-?1?)?*?n;

}?);

但是現在的JavaScript 支持了具名函數表達式:

[?1,?2,?3,?4,?5?].map(?function?factorial(?n?)?{

return?!(?n?>?1?)1?:?factorial(?n?-?1?)?*?n;

}?);

這樣寫有以下的好處:

可以像正常壹樣調用函數

不會在函數外面的作用域創建變量(IE8或者更早的瀏覽器還是會)

比起用 arguments 對象來說,性能更加優秀

同時,使用 arguments.callee 還會帶來函數引用優化問題和尾遞歸優化的問題。

以上部分內容資料來自:

/questions/103598/why-was-the-arguments-callee-caller-property-deprecated-in-javascript

  • 上一篇:C程序超時,麻煩大神幫忙看看
  • 下一篇:無線wifi網絡不順暢,總卡,什麽原因
  • copyright 2024編程學習大全網