1. javascript 匿名函數中this為什麼是window對象
this
含義:表示函數的所有者或作用域。JavaScript與this相關的難題是,不能保證對函數應用那個作用域?
問題:
js">window.onload=function(){
window.name="window";
/*
*字面值對象actionScope方法:
*myScope():它在控制台輸出"name:"+this.name,其
*屬性insideScope在控制台輸出"insidename:"+this.name
*/
varactionScope={
name:"jjjaiyy",
myScope:function(){
console.log("name:"+this.name);//name:jjjaiyy
insideScope=function(){
console.log("insidename:"+this.name);//insidename:window
};
insideScope();//執行
}
};
actionScope.myScope();
}
問題來了?(匿名函數中this為什麼是window對象)
因為嵌套函數(insideScope()) 與 包圍對象的內部函數(myScope() )的執行環境分離開了,並且所有無作用域的函數(只有全局對象)自動變成窗口對象的屬性。
解決:
使用bind()方法。
myScope:function(){
console.log("name:"+this.name);//name:jjjaiyy
insideScope=function(){
console.log("insidename:"+this.name);//insidename:jjjaiyy
}.bind(this);
insideScope();//執行
}
bind()方法,使用apply()方法把函數綁定到傳遞給對象的對象(將這個方法綁定到父對象中),共享執行環境。
2. 匿名函數的this指向為什麼是window
this在面向對象的編程語言里指的是當前對象。1、在函數中,因為函數不是一個對象,所以在函數內的中的當前對象應該是其父對象,沒有自定義的父對象只能是其根對象Window。2、解釋實例如下:<pre t="code" l="js"><script type="text/javascript">
window.onload=function(){
alert(this);
}
</script>結果彈出的應該為window對象,因為此時函數不是對象,只是一個實踐處理函數,所以this應該為當前對象即window對象。
3. javascript,this,anonymous function能幫忙解釋下這段代碼嗎
javascript是腳本 this是指向 anonymous function 是匿名函數 希望我的回答對你有所幫助,祝你身體健康!
4. javascript 中 匿名函數後面括弧中函數怎麼調用 是什麼意思 (function(){ }(this, function(obj){ }))
它可以解釋成為「匿名函數自調用」,也就是說,定義一個匿名函數,然後馬上調用它(因為它是匿名的,如果不立即調用就獲取不到該函數的引用了)。通常它被應用在一些大型的JS框架中(如上面所說的),因為這個匿名函數的函數體相當於提供一個匿名的名字空間,這樣就不會再與用戶自定義的JS函數、變數、對象發生沖突了。盡管JS沒有顯示地提供命名空間的定義和使用機制,但這種匿名方式卻不失為是一種很好的解決命名空間問題的方法。
所以說,(function(){代碼})()就等於執行了一個函數,只不過它是匿名的而已。如果在這個匿名函數內部想再次調用這個函數,就需要調用constructor屬性了(這是Object中定義的,JS的繼承機制如同Java一樣保證了了所有對象都繼承Object類)。
5. javascript有時為什麼一定要用this如以下例子。
but[i].onclick=function()
{
this.className='aaa'; //這樣寫是對的,this代表了當前的點擊的對象
};
but[i].onclick=function()
{
but[i].className='aaa'; //這樣寫會報錯,TypeError: but[i] is undefined
};
因為在匿名函數內找不到but[i],這是因為在上下文中沒有對but[i]進行聲明,在循環體內簡單修改下代碼
var buts = but[i]; //把but[i]賦值給bugs,那麼在匿名函數內就可以用了
buts.onclick=function()
{
buts.className='aaa';
};
不過裡面用this還是好些,因為用了上面的,那麼如果你有好幾個input框的話,結果只有最後的input的css起作用
6. js 閉包匿名函數內的方法怎樣被外部調用
var a = function(){
this.b = function(){
console.log("我是閉包函數");
}
return this;
}
調用:內容
var test = new a();
test.b();
或者:
a().b();
7. js 中對象與匿名函數的問題
js中apply()方法是函數源的一個屬性point.getX().apply() 這么用的時候,getX() 這是一個執行的函數,返回值是一個數字
p.apply(),p是一個函數
正確寫法應該是point.getX.apply()
8. js函數中匿名函數的this指針指向問題javascript高手請進!!!
匿名函數的this一般都是指向window的,這個不需要分析。
《javascript高級程序設計》這本書里的匿名專函數這一章也有講到,摘屬抄如下:
this對象是在運行時基於函數的執行環境綁定的:在全局函數中,this等於window,而當函數被作為某個對象的方法調用時,this等於那個對象。不過,匿名函數的執行環境具有全局性,因為其this對象通常指向window。
9. js 的匿名函數 它是怎麼調用的 怎麼運作
/*第一種,賦值給變數然後通過變數調用*/
varfun=function(){
};
fun();//調用
/*第二種就是立即執行,就是在匿名函數後邊添加一個括弧*/
(function(){
}());//結構一
function(){
}();//結構二
varfun2=function(){
}();//結構三
方法一適合在任意位置調用,方法二適用於閉包