JS Tom大叔五道題 其他部落格 帖子梳理

2021-08-03 22:38:33 字數 2603 閱讀 5593

tom大叔,5道題目

1.

if (!("a"

inwindow))

a;//

undefined

等價於:

var a;

if(!('a'

inwindow))

a;//

undefined

①所有全域性變數都window的屬性,var a=1;等價於window.a=1;

②檢驗全域性變數是否宣告的方法:」變數名稱」 in window

③所有的變數宣告都在範圍作用域的頂部。

④var a=1;包括了變數宣告和變數賦值。——

var a;//宣告

a=1;//初始化賦值

2.

var a = 1,

b = function

a(x) ;

alert(a);//1

等價於

var a = 1,

b = functin(x);

alert(a);//1

analysis:該題中,變數a宣告並初始化賦值為1,同時有個同名的函式,並將其儲存在變數b中,此時函式a被變數a所覆蓋,因此alert(a)為1。

①變數宣告在進入執行上下文就完成了。(var a)

②函式宣告也是提前的,所有的函式宣告都在執行**之前就已經完成了宣告。

③函式宣告會覆蓋變數宣告,但不會覆蓋變數賦值。

//在同名變數沒有賦值的情況下,同名函式的優先順序大於同名變數,因此覆而蓋之

function value()

varvalue;

typeof(value);//"function"

//變數value賦值了,那就不一樣了

function value()

varvalue=2;

typeof(value);//number

3.

function

a(x)

var a;

alert(a);//函式a

①當變數和函式同名時,在變數沒有賦值的情況下,同名變數被覆蓋掉。

②當變數和函式同名時,如果變數初始化賦值了,那麼同名函式被覆蓋掉。

4.

function

b(x, y, a)

b(1, 2, 3);

①活動物件是進入函式上下文時刻被建立的,它通過函式的arguments屬性初始化。

②arguments屬性的值是arguments物件。

③arguments物件是活動物件的乙個屬性,包括如下屬性:

a)callee—-指向當前函式的引用。

b)length—真正傳遞的引數個數。

c)properties-indexes(字串型別的整數)屬性的值就是函式的引數值(按引數列表從左向右排列),properties-indexes內部元素的個數等於arguments.length。properties-indexes的值和實際傳遞進來的引數之間是」共享」的。

④這個」共享」其實並不是真正意義上的共享同乙個記憶體位址,而是兩個不同的記憶體位址,使用js引擎來保證這兩個值是時刻保持一樣的,這需要乙個前提—-該索引值要小於你傳入引數的個數。

function

b(x,y,a)

b(1,2);

5.

function

a()

a.call(null);

等價於

//null/undefined 作為第乙個引數均轉化為全域性物件(window)

functiona()

a.call(window);

functiona()

a.call(window);

①this值是如何定義的:當乙個方法在物件上呼叫的時候,this就指向了該物件。object.method();

var

object=

}object.method();

②如果乙個函式的定義不是屬於乙個物件屬性的時候(也就是單獨定義的函式),該函式內部的this等價於window的。

function

method2

()method2();

6.this

①this是乙個與執行上下文相關的特殊物件。因此,可以稱作上下文物件(用來指明執行上下文是哪個上下文中所觸發的物件)。

②this是執行上下文的乙個屬性,而不是變數物件的乙個屬性。

zeromike的深入分析:

8.[[scope]]是在函式建立的時候被儲存起來的—靜態的(不變的),直至該函式被銷毀。

9.函式其實就是乙個物件,在這個物件裡儲存了如下的值:函式形參的名字,當前執行環境,函式體的**。

①形參的名字就是乙個字串陣列。

②函式體**也就是個字串。

10.函式定義就是一段**,執行到這段**之前,這個函式是」抽象」的存在。

11.實際的執行環境實在函式呼叫的時候建立的。

五道邏輯思維題

從1到100排列成一排,總共100個數,每一輪抽走奇數字置的數,問最後剩下哪個數?先思考小規模的問題,例如從1到10,模擬整個抽取過程如下。第1輪抽取完剩下所有偶數,如果都除以2,就變成了1到5的小問題 第2輪抽取後,還是剩下偶數,再除以2,變成1到2。所以最後剩下的數如果因式分解,就是包含因數2最...

讓我心碎的五道題

1.if a in window alert a 答案是undefined。首先js會把全部全域性的變數提前。所以此題能夠改動為 var a if a in window alert a 答案是1 首先要知道變數的宣告和函式的宣告都會提前,第二 函式的宣告會覆蓋變數的宣告。樣例 function v...

位元組跳動8 12機試五道程式設計題 Nelson

在 m,n 的矩陣中,只有1,0元素。定義相鄰包括 上,下,左,右,左上,左下,右上,右下八個點,求連通區域的數量,以及最大連通區域中元素1的個數。import sys a sys.stdin.readline strip split m int a 0 n int a 1 d num pp for...