js變量的作用範圍

前言:寫着寫着項目,看着日益繁多的js變量,突然對js變量的作用範圍產生了興趣,所以來研究一下,鑑於本人主要是搞後端的,這個主要是入門級js變量範圍介紹.

目錄

第一章 不同script塊中的js變量

1.1 先定義

1.2 後定義

1.3.1 另一種定義方式

第二章 定義在js文件中的變量

2.1 先定義

2.2 後定義

2.2.1 另一種定義方式

第三章 js塊中的函數

3.1 不同js塊中的函數先定義再使用

3.2 不同js塊中的函數先使用再定義

3.3 同一塊中的js函先使用再定義

3.4 同一塊中的js函數先定義再使用

第四章 js文件中的函數

4.1 先定義再使用

4.2 先使用再定義

4.3 同一js塊中函數互相調用

第五章 結論

5.1 js文件的引入

5.2 js變量函數作用規則

5.2.1 if,for中變量作用域


第一章 不同script塊中的js變量

1.1 先定義

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8" />
		<title></title>
	</head>
	<body>
		
	</body>
<script>
	var c=6
</script>
<script>
	console.log(c)
</script>

</html>

結果:6

結論:會影響

1.2 後定義

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8" />
		<title></title>
	</head>
	<body>
		
	</body>
<script>
	console.log(c)
</script>
<script>
	var c=6
</script>

</html>

結果:c is not defined

結論:定義了才能使用

1.3.1 另一種定義方式

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8" />
		<title></title>
	</head>
	<body>
		
	</body>
<script>
	console.log(c)
</script>
<script>
	c=6
</script>

</html>

結果:c is not defined

結論:定義了才能使用

第二章 定義在js文件中的變量

2.1 先定義

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8" />
		<title></title>
	</head>
	<body>
		
	</body>
<script src="js/index1.js"></script>
<script>
	console.log(c)
</script>

</html>

//index1.js

結果:輸出c

結論:會影響

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8" />
		<title></title>
	</head>
	<body>
		
	</body>
<script>
	var c ="www.baidu.com"
</script>
<script src="js/index1.js"></script>
</html>

結果:輸出c

結論:會影響

 

2.2 後定義

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8" />
		<title></title>
	</head>
	<body>
		
	</body>
<script>
	console.log(c)
</script>
<script src="js/index1.js"></script>
</html>

//index1.js 

結果:c未定義

結論:定義了才能使用

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8" />
		<title></title>
	</head>
	<body>
		
	</body>
<script src="js/index1.js"></script>
<script>
	var c ="www.baidu.com"
</script>
</html>

 //index1.js 

結果:c未定義

結論:定義了才能使用

 

2.2.1 另一種定義方式

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8" />
		<title></title>
	</head>
	<body>
		
	</body>
<script>
	console.log(c)
</script>
<script src="js/index1.js"></script>
</html>

 //index1.js 

結果:c未定義

結論:定義了才能使用

第三章 js塊中的函數

3.1 不同js塊中的函數先定義再使用

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8" />
		<title></title>
	</head>
	<body>
		
	</body>
<script>
	function out(url){
		console.log(url)
	}
</script>
<script>
	var c ="www.baidu.com"
	out(c)
</script>

</html>

結果:輸出c

結論:會影響

 

3.2 不同js塊中的函數先使用再定義

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8" />
		<title></title>
	</head>
	<body>
		
	</body>

<script>
	var c ="www.baidu.com"
	out(c)
</script>
<script>
	function out(url){
		console.log(url)
	}
</script>
</html>

結果:out未定義

結論:定義了才能使用

3.3 同一塊中的js函先使用再定義

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8" />
		<title></title>
	</head>
	<body>
		
	</body>
<script>
	var c ="www.baidu.com"
	out(c)
	function out(url){
		console.log(url)
	}
</script>

</html>

結果:輸出c

結論:會影響

3.4 同一塊中的js函數先定義再使用

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8" />
		<title></title>
	</head>
	<body>
		
	</body>
<script>
	function out(url){
		console.log(url)
	}
	var c ="www.baidu.com"
	out(c)
	
</script>

</html>

 結果:輸出c

結論:會影響

可以看到在一個塊中,函數並不需要遵循定義在前纔可以使用的原則,定義在後面的函數也能被調用.

第四章 js文件中的函數

4.1 先定義再使用

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8" />
		<title></title>
	</head>
	<body>
		
	</body>
<script src="js/index1.js"></script>
<script>
	var c ="www.baidu.com"
	out(c)
</script>

</html>

 //index1.js  

結果:輸出c

結論:會影響

4.2 先使用再定義

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8" />
		<title></title>
	</head>
	<body>
		
	</body>
<script>
	var c ="www.baidu.com"
	out(c)
</script>
<script src="js/index1.js"></script>
</html>

 //index1.js 

結果:out未定義

結論:定義了才能使用

4.3 同一js塊中函數互相調用

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8" />
		<title></title>
	</head>
	<body>
		
	</body>
	<script src="js/index1.js"></script>
<script>
	var c ="www.baidu.com"
	out(c)
</script>

</html>

//index1.js

可以看到out2函數定義早於out1

 

結果:輸出c

結論:會影響

第五章 結論

注:自己的推斷不一定對

5.1 js文件的引入

感覺js所謂的引入就相當於把js文件的代碼導入在引入的位置中,是因爲某個js塊的代碼太多,所以寫在了外部.

例如:

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8" />
		<title></title>
	</head>
	<body>
		
	</body>
<script src="js/index1.js"></script>

</html>

等於

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8" />
		<title></title>
	</head>
	<body>
		
	</body>
<script>
	function out2(url){
		out(url);
	}
	function out(url){
		console.log(url)
	}
</script>

</html>

5.2 js變量函數作用規則

在js塊中,全局變量可以作用於所有的js塊,但是必須遵循先定義再使用的原則.

其實會有變量提升和函數提升,會打破這個原則,這裏我們只是初步學習,所以不說這個,感興趣的可以去看

https://blog.csdn.net/qq_42606051/article/details/82016733

https://www.cnblogs.com/enjoymylift/p/6003155.html

局部變量只作用於當前作用域,如只作用在function.如果在function中使用變量不加var,那麼此變量會變成全局變量.

可以參考https://www.cnblogs.com/yedliu/p/6517572.html

同一個塊中,函數不必遵循定義再使用的原則,先定義的函數可以調用後定義的函數,不同塊中要遵循先定義後使用

簡單解釋下:

運行一段JS代碼時:

    JS引擎會先掃描整個JS代碼,把所有全局變量都綁定到window對象上,包括函數和變量的定義。此時,window上就有了函數和值爲undefined

5.2.1 if,for中變量作用域

參考:https://www.cnblogs.com/junwuyao/p/7674753.html

在JS中,只有函數作用域,沒有塊級作用域!!!也就是說,if/for等有{}的結構體,並不能具備自己的作用域。

下面的代碼中,b是全局變量.

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8" />
		<title></title>
	</head>
	<body>
		
	</body>
<script>
	var a=3 
	if(a==3){
		var b=6
	}
</script>
<script>
	console.log(b);
</script>
</html>

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章