記兩道js題的理解 JS匿名自執行函式(IIFE)

2021-09-25 09:00:09 字數 1519 閱讀 7259

今天看到兩道js題,查了資料和自己的理解寫下個人的見解

var name = 'world!';

(function () else

})(); // goodbye jack

var foo = 1;

(function foo()())

console.log(foo);

// ƒ foo()

// 1

在解決問題前先理解一下函式的命名方式:函式宣告式、函式表示式

語法形式:

function name()
函式宣告式會使得函式宣告提公升,意思是在執行**之前會先讀取函式宣告,在函式宣告前呼叫也不會出錯

sayname(); // my name is bonnie 

function sayname()

語法形式:

var fun = function()

//iife立即呼叫函式表示式

(function()())

//同下

(function())()

函式表示式不會函式宣告提公升,只有執行到它時才會執行。函式表示式與其他表示式一樣,在使用前必須先賦值。否則報錯

sayname(); // uncaught typeerror: sayname is not a function

var sayname = function()

函式表示式的函式名不可修改,如修改則在非嚴格模式下不起效,在嚴格模式下報錯:uncaught typeerror: assignment to constant variable.

(function sayhi())(); // uncaught typeerror: assignment to constant variable.
接下來分析問題:

var name = 'world!'; //外部宣告變數name

//iife立即呼叫函式表示式

(function () else

})();

//等同於

(function () else

})();

這個問題所在是變數提公升的原因,如果把iife裡面的name宣告改為let則輸出『hello world!』

var name = 'world!';

(function () else

})(); // hello world!

另一道題的分析

var foo = 1;

(function foo()())

console.log(foo); //由於iife宣告的函式或者變數只在那個作用域,所以這裡的foo是外部作用域的foo,輸出1

以上是個人拙見,如有問題請各位大佬提點

分享兩道Js筆試題

輸入 float flag flash 輸出 fl 這是我在筆試的時候寫的方法 肯定不是最優解 function fnc arr 輸出 剛開始拿到這個題的時候有點懵,以前在開發沒有做過這類轉換 筆試的時候按自己的想法寫了個遞迴方法去實現 思路與大佬基本相同 不過估計涼了。放幾個大佬的答案 方法一 f...

Spider兩道題 ,沒全理解

conding utf 8 from bs4 import beautifulsoup import requests import time 1.需求分析 獲取 title python 練習例項1 timu 題目 有四個數字 1 2 3 4,能組成多少個互不相同且無重複數字的三位數?各是多少?c...

益智題 (簡單的兩道題)

a公司拍攝的 黃河頌 獲最佳故事獎 b公司的 孫悟空 獲最佳武術獎 c公司的 白娘子 獲最佳戲劇獎。a公司的經理說 我們三經理的姓分別是三部片名的第乙個字,而又同自己所拍 首字不一樣。另一公司的孫經理笑著說 真是這樣 那三經理各姓什麼?答案 a白 b黃 c孫 另一公司的孫經理 說明a不姓孫,而a又不...