iT邦幫忙

0

各位好~ 小弟我是一名剛入門學習JS約1個月的初學者,目前對於 JS函式運算式有一點疑問想請教...

各位前輩您好,能否能跟您們請益一下,關於JS部份問題,因自主買書自修,按照書上所寫方式練習,但因為不知道錯誤點在哪(嘗試找了很久....),仍在頁面上無法顯示 Xl()的回傳值,拜託前輩大大們能否指導小弟,錯誤盲點在哪???

萬般感謝
$(document).ready(function(){
var width = 600;
var shape = {width: 300};
var xl = function(){
document.write(this.width);
};
xl();
});

以後問問題,不要把你學多久,是個初學者這種話搬出來。
有問題就直接發問就好。
這句話不只是講給你聽,而是講給所有會發問的人聽。
通靈亡 iT邦研究生 5 級 ‧ 2020-05-09 16:40:56 檢舉
我覺得樓主可以換個順序
把你是初學者的立場放到問題後面,表達你已經努力嘗試但需要方向
讓回答的人以初學者的角度回答
...................................
我最近在自學JS 遇到了某個問題:
(...問題描述...)

由於剛學JS一個月,本身不是很了解JS
(也嘗試了怎麼做...),問題還是仍然存在
需要有經驗的大大們幫忙
...................................
標題直接打問題,對往後的人也較好搜索
1
hungchinwai
iT邦研究生 1 級 ‧ 2020-05-09 14:18:35
最佳解答

可能你需要的是完整的html結構加js

<html>
	<script>
		var width = 600;
		var shape = {width: 300};
		var xl = function(){
		   document.write(this.width);
		};
		xl();
	</script>
	<body>
	</body>
</html>
fillano iT邦超人 1 級 ‧ 2020-05-09 21:01:52 檢舉

不,他的問題是因為在$(document).ready(function(){...})裡面跑,然後他想用this.width取var width,但this已經被jquery綁到document物件去了。這一段程式在global scope跑不會有問題。

1
海綿寶寶
iT邦大神 1 級 ‧ 2020-05-09 11:10:00

我跟你相反
我找不到錯誤點在那
因為可以正常執行...
你可以到JS Bin去試試看

https://ithelp.ithome.com.tw/upload/images/20200509/20001787Y1tTbaMGXU.png

fillano iT邦超人 1 級 ‧ 2020-05-09 20:56:44 檢舉

那一段是在$(document).ready(function(){...}))跑,這樣this會被jquery把他bind在document物件上,而他沒有width屬性,所以出錯。

他的程式碼要像你這樣跑才會正常。在global scope的宣告的變數會bind在window物件上,所以var width相當於window.width,而xl也在global scope跑且沒有bind在任何物件下,所以this是window物件,符合這個條件程式才能正確執行。

0

我也可以回傳喔 是回傳 600

1
bluegreenking2
iT邦新手 5 級 ‧ 2020-05-10 21:47:25

我習慣再使用jQ前把this先 附值 給var self
因為jQ會綁架this,不是很確定原因但很多次也跟版主一樣要用this會出錯
所以乾脆用jQ前先給self
上面放個input顯示

  var width = 600;
  var shape = { width: 300 };
  var self = this;
  $(document).ready(function () {
    var xl = function () {
      $('#name').val(self.width);
    };
    xl();
  });

出來的name value = 600

1
lkjmn1234
iT邦新手 5 級 ‧ 2020-05-11 14:59:17

盲點就是你攪不懂this的定義
建議你看看https://www.w3schools.com/js/js_this.asp

0
chubee
iT邦見習生 ‧ 2020-05-15 17:41:59
    <script src="https://code.jquery.com/jquery-1.12.4.min.js"></script>
    <script>
      $(document).ready(function(){
        var width = 600;
        var shape = {width: 300};
        var xl = function(){
          document.write(width);
        };
        xl();
      });
    </script>

this.width改成width
試看看

我要發表回答

立即登入回答