js總結(作用域 繼承)

2021-08-15 04:47:31 字數 2458 閱讀 1461

函式 全域性作用域 函式作用域 全域性變數 區域性變數

如果函式或其他資料型別,不依託非全域性變數,那麼就預設依託全域性變數,作為全域性物件的屬性和方法,否則被當做區域性物件屬性或方法。this被用作指向屬性和方法所依託的物件。

var x = 100;

var y=77;

var a1=}

a1.xx();//77, 99

a1.xx.call(window);//77, 100

//下面是重點!!!

var jj = a1.xx;

jj(); //77, 100 效果跟a1.xx.call(window); 一樣

以上**,倒數第

三、四行**都不難理解,倒數第一行**怎麼理解呢?首先我們看jj定義在全域性物件中,即jj是window的屬性,從jj的賦值我們知道,jj是乙個方法,jj()也就相當於window.jj(),即呼叫函式的this指向全域性物件window。

例:var obj = new base(); 該步一共做了三件事:即 var obj = {}; obj.__proto__ = base.prototype; base.call(obj); 第一行,我們建立了乙個空物件obj 第二行,我們將這個空物件的__proto__成員指向了base函式物件prototype成員物件 第三行,我們將base函式物件的this指標替換成obj。

var a= new a()

var a = {};

a.__proto__ = a.prototype;

a.call(a)

摘抄自js高階程式設計(第三版)145頁:

要建立person的新例項,必須使用new操作符。以這種方式呼叫建構函式實際上會經歷以下4個步驟:

(1)建立乙個新物件;

(2)將建構函式的作用域賦給新物件(因此this就指向了這個新物件);

(3)執行建構函式中的**(為這個新物件新增屬性);

(4)返回新物件。

建構函式會給建立的例項新增所有屬性和方法包括自有屬性和prototype的屬性

function a()

a.prototype.name="father";

var a= new a();//建構函式會給建立的例項新增所有屬性和方法包括自有屬性和prototype的屬性

var b={};

原型鏈概念:當構造器生成新物件,這個物件查詢物件屬性時,先找物件屬性,如果沒有則上溯到原型中查詢,直到查詢到object。物件自身屬性優先順序高於原型屬性。可以覆蓋。

重點:js執行是從上到下,一行一行的,正式執行前,會將所有var宣告的變數和function宣告的函式,預讀到作用域頂部。var 宣告只是將宣告提前,賦值仍然保留在原位置,function 宣告,會將函式名稱和函式體都提前。而且先預宣告變數再預定義函式。這個過程叫「預解析」或者「預編譯」。

console.log(a)//不會報錯,輸出undefined

var a=100

console.log(a)//100

var x=1,y=0,z=0;

var f=function(x)

y=f(x)

function f(x)

z=f(x)

console.log(x,y,z)

//1,2,2

解釋:x只是作為引數傳入函式,不變,

函式宣告:以function開頭,會先執行

函式表示式:var f=function(){}不提前

1. 函式宣告提前,記錄function f(){}

2. 函式表示式覆蓋f var f = function(x)

3. y=f(x);y 2

4. z=f(x);z 2

var  a=1;

alert(a);//1

var f=function();

alert(a);//1

f();

alert(a);//2

function f()

alert(a);//2

f();//函式宣告提前

alert(a);//2

f=function();

alert(a);//2

f();

alert(a);//5

var num=1;

var myobject=)();

console.log(this.num)

}, sub:function()

}myobject.add();//1,3

myobject.sub();//3

在這個上下文(執行環境)中匿名函式並沒有繫結到任何乙個物件中,意味著this指向window

JS作用域和作用域鏈

什麼是js作用域?js作用域也就是js識別變數的範圍 1 全域性作用域 2 區域性作用域 3 e6的塊級作用域 全域性作用域 也就是定義在window下的變數範圍,在任何地方都可以訪問 區域性作用域 是只在函式內部定義的變數範圍 塊級作用域 簡單來說就是用let和const在任意的 塊中定義的變數都...

JS作用域面試題總結

1.js作用域 全域性變數,區域性變數 內部可以訪問外部,但外部的不能訪問內部的 var a 10 function aaa aaa a 為外部變數即全域性變數,所以可以直接訪問到 結果為10 function aaa aaa alert a a 為函式aaa 內部變數量即區域性變數,所以無法訪問到...

js中的作用域和作用域

作用域是在執行時 中的某些特定部分中變數,函式和物件的可訪問性 簡單的說就好似變數能起到作用的範圍 區域性作用域 也可以叫做函式作用域 一般只在固定的 片段內可訪問到,最常見的例如函式內部 如下 在我們在函式中用var關鍵字宣告乙個 變數 a 在函式外輸出a的值 function scope con...