不是一個東西,一般來說,js執(zhí)行環(huán)境就是瀏覽器。作用域應該說的是js變量、對象、函數(shù)的作用域,主要是變量的生存周期,就是說再執(zhí)行哪些代碼之后,這個變量就沒有用了。
鄂托克前網(wǎng)站制作公司哪家好,找創(chuàng)新互聯(lián)!從網(wǎng)頁設計、網(wǎng)站建設、微信開發(fā)、APP開發(fā)、響應式網(wǎng)站設計等網(wǎng)站項目制作,到程序開發(fā),運營維護。創(chuàng)新互聯(lián)2013年開創(chuàng)至今到現(xiàn)在10年的時間,我們擁有了豐富的建站經(jīng)驗和運維經(jīng)驗,來保證我們的工作的順利進行。專注于網(wǎng)站建設就選創(chuàng)新互聯(lián)。
作用域于參數(shù)類型無關,也就是說不管參數(shù)是函數(shù)還是其他類型,這個參數(shù)的作用域只在接收這個參數(shù)的函數(shù)內(nèi)有效,如下:
function?test(callback){
if(typeof?callback?==?"function"){
callback();
}
//此時這個參數(shù)的作用域只在test這個函數(shù)內(nèi)有效,其他地方都是無效的。
}
this是一個指針類型,一般情況下是指向調用該方法或者屬性的對象本身,除非指定了this的指向,否則都是指向window對象,下面這段代碼希望對你的理解有幫助。
var?obj?=?{
fun:function(){
this.log("這個地方的this即為obj對象");
},
log:function(text){
console.log(text);
//當然這里的this也是指向obj對象的
}
}
function?stu(){
this.getAge?=?function(){
//此時這里的this指向stu類的實例,即指向下面注釋代碼中的stuObj對象
//var?stuObj?=?new?stu();
//stu.getAge();
}
}
function?callback(){
//此時這里的this指向下面被注釋代碼中的obj,因為他手動指定了this對象
//除了call可以手動指定this之外apply也可以指定this指向
//var?obj?=?{name:"小明"};
//callback.call(obj);
}
除了以上幾種情況下,還有一種情況this是指向dom元素本身的,如下:
a?href="#"?onclick="alert(this.href)"這個this即為這個a標簽本身/a
除了以上幾種情況,this都是指向window對象的,當然不排除有一些我不清楚的情況。
變量作用域是任何一種程序,都存在的問題!
通俗地講就是一個變量在多大的范圍里有效,也就是能夠訪問!
用JS打個比方
script type="text/javascript"
var a = 'hello';
function test(){
var b = 'world';
alert(a);//將提示 hello
alert(b);//將提示 world
}
alert(a);//將提示 hello
alert(b);//將提示 undefined 也就是說變量不存在,這是因為b的變量作用于只局限在 函數(shù) test內(nèi)部。
/script
js能劃分作用域的只有function,塊級作用域指的是定義在條件或循環(huán)分支中的,像你舉的這個函數(shù)例子,test定義在for循環(huán)之內(nèi),再for循環(huán)之外也能訪問what變量 (這是js的變量提升,可以查一下,它會把what提升到test函數(shù)的最開頭定義)function test(){
for(var i=0;i3;i++){
var what = "haha";
} console.log(what);
}
test();
如果你這段代碼換成Java的,是下面這樣的:private void test(){
for(int i=0;i3;i++){
String what =“123";
}
System.out.println(what);
?
這個方法是編譯不通過的,因為what的作用域只在for循環(huán)之內(nèi),為塊級作用域。