簡體   English   中英

JS瑣事-如果條件內部定義函數

[英]JS trivia - defining function inside if condition

為什么此代碼打印undefined而不是function

if (function f(){}) {
    console.log(typeof f);
}

...雖然此打印function符合預期:

eval('function g(){}');
console.log(typeof g);

(並且if (x = 42) console.log(x);則按預期輸出42

注意:我完全知道這種代碼是不好的做法,而且我知道大多數短毛貓也會拒絕它,因為他們應該這么做……但是我很好奇 Java解釋器的行為背后的邏輯是什么。

因為命名函數表達式中的函數名稱不會添加到表達式所在的作用域中(與函數聲明不同,函數聲明 將名稱添加到發生表達式的作用域中)。 對於NFE,名稱僅在功能范圍內。 您的if中的一個是NFE。 eval中的一個是聲明。

例子:

 // NFE var x = function foo() { console.log("2: ", typeof foo); // function }; console.log("1: ", typeof foo); // undefined x(); // Declaration function bar() { } console.log("3: ", typeof bar); // function 

function產生被用作值時(例如,在if中或在賦值的右側等),它是一個表達式。 當它是獨立的時,它是一個聲明。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM