鍍金池/ 問(wèn)答/HTML/ 請(qǐng)問(wèn)在以下代碼中變量 var $content 為什么在下面 bind 方法中沒(méi)

請(qǐng)問(wèn)在以下代碼中變量 var $content 為什么在下面 bind 方法中沒(méi)有作用?

$(function(){
    var $content = $(this).next();

    $("#para h5.head").bind("mouseover",function(){
        $content.show();        //$(this).next().show();
    }).bind("mouseout",function(){
        $content.hide();        //$(this).next().hide();
    })
});

在執(zhí)行的時(shí)候,變量 $content 訪問(wèn)不到,如果按照注釋編輯代碼反而可以使用。

請(qǐng)問(wèn)是作用域的問(wèn)題嗎?還是哪里出錯(cuò)了,還是不可以這么聲明。謝謝。

回答
編輯回答
硬扛

var $content = $(this).next(); //這里的$(this)的上層如果找不到對(duì)象的話,會(huì)默認(rèn)指向window,而window是沒(méi)有next()的,這里就應(yīng)該會(huì)報(bào)錯(cuò)了。
如果這里沒(méi)有報(bào)錯(cuò),那么這里的$content也只是特定的文檔對(duì)象,而不是你以為的“$(this).next()"這段代碼。

而你bind里的$(this)指的是這個(gè)$("#para h5.head")文檔對(duì)象。
如果你上邊的$content剛好也指向這個(gè)文檔的話,就不會(huì)報(bào)錯(cuò),比如把 var $content = $(this).next();改成$("#para h5.head");則bind里就可以這樣寫:$content.next().show();

如果var $content=$("#para h5.head").next();則bind中可以這樣寫:
$content.show();

2017年7月11日 04:44
編輯回答
綰青絲

你在bind外面聲明時(shí),this指向的是window
而你在bind里面使用$(this), 這里的this指向的是$("#para h5.head")這個(gè)對(duì)象,所以執(zhí)行正確。
但是你用$content時(shí)對(duì)象是指window而不是$("#para h5.head"),所以訪問(wèn)不到。
能明白?

2017年11月3日 17:08
編輯回答
北城荒
$(this).next();

這里的this是文檔

2017年12月15日 21:01