javascript基礎(函式與方法的區別,變數作用域,變數和函式的宣告提前,函式作用域)(十五)
1.函式與方法的區別:
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title></title>
<script type="text/javascript">
/*
* 方法(method)
*/
//建立一個物件
var obj = {name:"孫悟空",age:18};
//物件的屬性也可以是物件
obj.brother = {name:"豬八戒",age:28};
//console.log(obj.brother.name);
//物件的屬性也可以是一個函式
//當一個物件的屬性是一個函式時,我們稱這個函式是這個物件的方法
//函式和方法只是稱呼上的不同,本質上沒有區別
obj.sayName = function(){
console.log("Hello 大家好 我是孫悟空~~~");
};
//console.log(obj.sayName);
//當我們呼叫物件中的函式時,我們稱我們在呼叫物件的方法
//obj.sayName();
var obj2 = {
name:"沙和尚",
age:38,
sayName:function(){
console.log("我是老沙~~~");
}
}
obj2.sayName();
</script>
</head>
<body>
</body>
</html>
2.變數作用域:
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title></title>
<script type="text/javascript">
/*
* 作用域(Scope)
* - 作用域簡單來說就是指一個變數的作用的範圍
* - 在JS中作用域分成兩種:
* 1.全域性作用域
* 2.函式作用域
*
* - 全域性作用域:
* 1.所有直接在script標籤中編寫的程式碼都在全域性作用域中
* 2.全域性作用域在開啟網頁時建立,在網頁關閉時銷燬
* 3.全域性作用域中有一個全域性物件window,
* window代表的是瀏覽器的視窗,
* 在全域性作用域中建立的變數都會作為window物件的屬性儲存
* 在全域性作用域中建立的函式都會作為window物件的方法儲存
* 4.在全域性作用域中建立的變數都是全域性變數,可以在頁面的任意位置訪問
*/
var a = 123;
var b = 456;
//console.log(window.b);
//console.log(window.c);
function fun(){
console.log(b);
console.log("我是全域性中的函式fun。。。。");
}
fun();
//window.fun();
//window.alert("hello");
</script>
</head>
<body>
</body>
</html>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title></title>
<script type="text/javascript">
//如果不寫var,直接為變數賦值,則相當於為window物件新增屬性
//window.a = 10;
//a = 10;
/*
* 變數的宣告提前
* - 使用var關鍵字宣告的變數,都會在所有的程式碼執行之前被宣告,但是不會賦值
* 賦值會直到執行到賦值的程式碼時才執行
* - 如果不適用var關鍵字宣告變數,則不會有宣告提前的特性
*
* 函式的宣告提前
* - 使用函式宣告建立的函式,會在所有的程式碼執行之前建立,
* 所以我們可以在函式宣告前就去呼叫函式
* - 使用函式表示式建立的函式,沒有這個特性,所以不能在它建立之前呼叫
*/
//console.log("a = "+a);
var a = 10;
//fun();
//console.log(fun2);
//使用函式宣告來建立一個函式
function fun(){
console.log("我是fun函式。。。。");
}
//使用函式表示式建立一個函式
var fun2 = function(){
console.log("----->我是fun2.。。。");
};
</script>
</head>
<body>
</body>
</html>
4.函式的作用域:
(一)
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title></title>
<script type="text/javascript">
/*
* 函式作用域
* - 函式作用域可以理解為是全域性中的小的作用域
* - 函式作用域在函式呼叫時建立,在呼叫結束時銷燬
* 每呼叫一次函式就會建立一個新的函式作用域
* - 在函式作用域中可以訪問到全域性變數,
* 而在全域性中無法訪問到函式作用域中的變數
* 在函式中建立的變數如果不寫var,則會變成全域性變數
* - 當我們在函式中使用一個變數時,它會先在自身的作用域中尋找,
* 如果有就直接使用,如果沒有則去上一級作用域中尋找,
* 找到則使用,沒找到則繼續尋找,直到找到全域性作用域為止
* 如果全域性作用域中依然沒有,則報錯ReferenceError
* - 在函式作用域中也適用變數和函式的宣告提前
*
*/
//建立一個全域性變數a
var a = "全域性中的a";
function fun(){
//console.log(a);
//window.b = ...
var b = "---> 函式作用域中的b";
//console.log(b);
}
//fun();
//console.log(b);
//建立全域性變數c
//var c = "全域性c";
/*function fun2(){
//建立一個區域性變數c
var c = "---> 函式中的c";
console.log(c);
}
fun2();*/
function fun3(){
//var c = "fun3中的c";
function fun4(){
//var c = "fun4中的c";
console.log(c);
}
//呼叫fun4
fun4();
}
//fun3();
</script>
</head>
<body>
</body>
</html>
(二)
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title></title>
<script type="text/javascript">
var a = "全域性a";
function fun(){
var a = "--> 函式a";
//如果在函式作用域中想訪問全域性變數可以通過window物件來訪問
console.log(window.a);
}
//fun();
a = 20;
/*
* 在函式內部使用var關鍵字宣告的變數也會被宣告提前,
* 它的宣告會在所有的程式碼執行前執行
*
* 在函式內部使用函式宣告建立的函式,也會在所有的程式碼執行之前被建立
*/
function fun2(){
fun3();
//console.log(a);
//var a = 10;
function fun3(){
console.log("我是fun2內部的函式。。。");
}
}
fun2();
</script>
</head>
<body>
</body>
</html>
練習:
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title></title>
<script type="text/javascript">
/*var a = 10;
function fun(){
a = 5;
}
fun();
console.log(a);*/
var a = 123;
/*
* 定義形參就相當於在函式中宣告瞭對應的變數
*/
/*function fun(a) {
alert(a);
a = 456;
}
fun(); //undefined
alert(a); //123*/
var a = 123;
function fun(a) {
alert(a);
a = 456;
}
fun(123); //123
alert(a); //123
</script>
</head>
<body>
</body>
</html>
相關文章
- 函式(三)作用域之變數作用域、函式巢狀中區域性函式作用域、預設值引數作用域函式變數巢狀
- Python 函式和變數作用域Python函式變數
- 十二、變數作用域:區域性變數、全域性變數,函式版名片管理系統—新增函式文件變數函式
- JavaScript塊級作用域宣告函式JavaScript函式
- JavaScript 之有趣的函式(函式宣告、呼叫、預解析、作用域)JavaScript函式
- [JavaScript基礎] 函式,初識作用域JavaScript函式
- javascript函式讀取變數作用域簡單介紹JavaScript函式變數
- JS基礎難點總結(函式作用域,變數提升,物件,建構函式,this)全!!!JS函式變數物件
- 函式與作用域函式
- javascript函式和變數宣告提前簡單介紹JavaScript函式變數
- JavaScript 變數與函式宣告前置JavaScript變數函式
- Python函式引數傳遞以及變數作用域Python函式變數
- javascript的函式的引數是區域性變數JavaScript函式變數
- golang常用手冊:陣列、變數作用域、函式Golang陣列變數函式
- 第 8 節:函式-函式型別與作用域函式型別
- Python入門(十八):變數作用域與巢狀函式Python變數巢狀函式
- 《前端實戰總結》之變數提升,函式宣告提升及變數作用域詳解前端變數函式
- javascript變數物件函式呼叫棧作用域閉包等細解!JavaScript變數物件函式
- test函式中的區域性變數函式變數
- 神奇的函式作用域函式
- JavaScript函式宣告和函式表示式區別JavaScript函式
- 未知領域系列:Python基礎之迴圈,條件,包,函式,模組和變數作用域Python函式變數
- JS變數宣告和函式宣告提升JS變數函式
- 函式外與函式內的變數函式變數
- 函式宣告和函式表示式的區別函式
- Java static變數、作用域、建構函式初始化順序Java變數函式
- javascript函式引數和函式內同名變數的關係JavaScript函式變數
- javascript中的作用域(全域性變數和區域性變數)JavaScript變數
- Javascript 函式和變數提升JavaScript函式變數
- 函式不能返回區域性指標變數函式指標變數
- 作用域安全的建構函式函式
- 『無為則無心』Python函式 — 30、Python變數的作用域Python函式變數
- 變數和函式宣告提升,let和var const區別變數函式
- 關於變數的宣告和定義、內部函式和外部函式變數函式
- Python課堂筆記 第7章 包、模組、函式與變數作用域Python筆記函式變數
- JS內建物件,函式與作用域JS物件函式
- 深入解析JS變數宣告和函式宣告提升JS變數函式
- 淺談JS變數宣告和函式宣告提升JS變數函式