函式 全域性作用域 函式作用域 全域性變數 區域性變數
如果函式或其他資料型別,不依託非全域性變數,那麼就預設依託全域性變數,作為全域性物件的屬性和方法,否則被當做區域性物件屬性或方法。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...