日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

undefined和is not defined一样吗?

發布時間:2023/12/18 编程问答 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 undefined和is not defined一样吗? 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

https://blog.csdn.net/sheldon178/article/details/48298151/

undefined和is not defined,字面意思看來沒什么兩樣,不都是未定義嗎?

在JavaScript中,可并非如此。

undefined定義如下:

undefined是javascript的一種基本數據類型,變量未賦值或者函數沒有返回值時返回。

xx is not defined:

xxx is not defined是一種錯誤類型,其完整形式是:Uncaught ReferenceError: xxx is not defined(未捕獲的引用錯誤),對象表明一個不存在的變量被引用,即:當你嘗試引用一個未被定義的變量時,將會拋出一個 ReferenceError 。

由此可見:undefined和is not defined的本質區別在于:變量是否被定義。

接下來舉個栗子把作用域和變量定義及未被定義說道說道。

涉及:局部變量,全局變量,作用域

前兩天加了一個群,群主分享了一道小測試,恰巧讓我有機會重新思考文章開頭提到的問題。

打印結果依次為:undefined-----30-----b is not defined

先分析c:30

ES5中,作用域分為全局作用域和函數作用域,c君未聲明,直接賦值,即賦予了其全局光環,所以即使它囿于函數fn

范圍內,但是依然可以跳脫出函數作用域的禁錮,自由活動,無論在哪都可打印出c君的值;

一句話:沒有用var聲明的就是全局變量,即便在函數內部!
但如果有var聲明的話,根據位置是否在函數內部判斷到底是全局還是局部變量!

分析b:b is not defined

fn函數的作用域內,b作為局部變量,b君既被聲明又被賦值,所以唯有在調用fn函數即 fn()后,b君才能彰顯其價值,打印出值來

但b君相當委屈,雖然要啥有啥,但是圈禁在函數作用域內,所以作用域外部打印b時,是無法在全局作用域的范圍內尋找到b君的蹤影的,只有在函數作用域內console.log(b)才能看到b的值;

在全局作用域內,b君連聲明都沒有,我上哪找你去?所以只能Uncaught ReferenceError: b is not defined.

捕獲不到你啊!

所以如果console.log(b)是在大括號{}內部,b就是20了,而不是is not defined了。

只有在function內部新聲明的才是局部變量。

分析a:undefined

這里有個迷惑項,判斷語句的大括號內部{}是個作用域嗎?答:當然不是啦!

只有在function內部新聲明的才是局部變量,在if、while,for里面聲明的變量統統都是全局變量!

所以,a君其實是個全局變量,在解析過程中,先將a變量提升:var a;

然后進入判斷語句,因為判斷條件是false,所以無法進入判斷語句內部,那么a無法被賦值,所以,打印a為undifined;

如果,把判斷條件!f 改為f,即為true,那么console.log(a),打印的就是10啦!

所以,賦值階段一定要和判斷條件結合起來~

參考文章:https://blog.csdn.net/sheldon178/article/details/48298151/

總結

以上是生活随笔為你收集整理的undefined和is not defined一样吗?的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。