今天看到兩道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又不...