1.利用函數(shù)的關(guān)鍵字定義函數(shù)(也叫命名函數(shù)洞豁,因?yàn)橛泻瘮?shù)名)
function fn(){ } fn();
2.函數(shù)表達(dá)式(匿名函數(shù) 把整個(gè)函數(shù)體賦值給一個(gè)變量
js var fn = function(){};
1.就是代碼名字(變量)在某個(gè)范圍內(nèi)起作用和效果恐仑,目的是要提高程序的可靠性蹂空,重要的是解決命名沖突
2.js 的作用域(es6:ECMAScript 6 一個(gè)js版本)之前:全局作用域 局部作用域
3.全局作用域:整個(gè)script標(biāo)簽遭顶,或者是一個(gè)單獨(dú)的JS標(biāo)簽
4.局部作用域(函數(shù)作用域): 在函數(shù)內(nèi)部使用驶睦,這個(gè)代碼的名字(變量名)只在函數(shù)內(nèi)部起效果
通常來說锻梳,一段程序代碼中使用到的名字并不總是有效可用的俏橘,而限定這個(gè)名字的就是這個(gè)名字的作用域枢劝,井联。
作用域的使用提高了程序邏輯的局部性,增強(qiáng)了程序的可靠性呈野,減少了名字的沖突
在javascript中低矮,根據(jù)作用域的不同,變量可以分為兩種
全局變量和局部變量(其實(shí)跟函數(shù)全局作用域和局部作用域思想一樣)
//全局變量
var num = 10;
console.log((num));
function fn() {
console.log(num);
}
fn();
函數(shù)的形參也可以看作是局部變量
//局部變量
function fun() { //num1是局部變量被冒,只能在函數(shù)內(nèi)部適用
var num1 = 10;
}
fun();
console.log(num1);
function fun() { //num1是局部變量军掂,只能在函數(shù)內(nèi)部適用
var num1 = 10;
num2 = 20;
}
fun();
//console.log(num1);
console.log(num2);
1.全局變量只有瀏覽器關(guān)閉的時(shí)候才會(huì)銷毀,比較占用內(nèi)存
2.局部變量 當(dāng)程序執(zhí)行完畢就會(huì)銷毀昨悼,比較節(jié)約資源
如果函數(shù)中還有函數(shù),那么在這個(gè)作用域中又可以誕生一個(gè)作用域
根據(jù)在內(nèi)部函數(shù)可以訪問外部函數(shù)變量的這種機(jī)制率触,用鏈?zhǔn)讲檎覜Q定哪些數(shù)據(jù)能被內(nèi)部函數(shù)訪問终议,就稱作作用域鏈
鏈?zhǔn)讲檎遥簝?nèi)部函數(shù)訪問外部函數(shù)的變量,會(huì)向上一級(jí)查找葱蝗,如果沒有這個(gè)變量穴张,再向更上一級(jí)查找,這就是鏈?zhǔn)讲檎?/p>
結(jié)果采用
就近原則
两曼,采用離自身最近的那一個(gè)變量皂甘,如下例,輸出外部函數(shù)20悼凑,而不會(huì)輸出全局變量10:
//作用域鏈
var num = 10;
function fn() { //外部函數(shù)
var num = 20;
function fun() { //內(nèi)部函數(shù)
console.log(num);
}
fun();
}
fn();
分析:
或者偿枕,就從調(diào)用變量的語句開始向外找,找到上一級(jí)户辫,也是一樣的
function f1() {
var num = 123;
function f2() {
console.log(num);
}
f2();
}
var num = 456;
f1();
var a = 1;
function fn1() {
var a = 2;
var b = '22';
fn2();
function fn2() {
var a = 3;
fn3();
function fn3() {
var a = 4;
console.log(a); //a的值4
console.log(b); //b的值'22''
}
}
}
fn1();
function fun(){
var a = 123;
}
fun();
consloe.log(a);
返回值:
這里返回a未定義渐夸,就是因?yàn)閍的作用于只限于函數(shù)內(nèi)部,在外部是不起作用的
function fun(){
var a = 123;
}
fun();
consloe.log(a);
返回值:
這里返回a未定義盐数,就是因?yàn)閍的作用于只限于函數(shù)內(nèi)部,在外部是不起作用的
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title></title>
<script type="text/javascript">
/*
* 作用域
* - 作用域指一個(gè)變量的作用的范圍
* - 在JS中一共有兩種作用域:
*
* 1.全局作用域
* - 直接編寫在script標(biāo)簽中的JS代碼伞梯,都在全局作用域
* - 全局作用域在頁面打開時(shí)創(chuàng)建玫氢,在頁面關(guān)閉時(shí)銷毀
* - 在全局作用域中有一個(gè)全局對象window,
* 它代表的是一個(gè)瀏覽器的窗口谜诫,它由瀏覽器創(chuàng)建漾峡,我們可以直接使用
* console.log(window);返回值: 【object Window】證明有這個(gè)全局對象
* - 在全局作用域中:
* 1.創(chuàng)建的變量都會(huì)作為window對象的屬性保存
*
* var a = 10;這個(gè)a = 10;就是作為一個(gè)屬性保存到window對象里
* console.log(window.a); 返回值就是 10
* console.log(c);會(huì)報(bào)錯(cuò)喻旷,因?yàn)闆]有這個(gè)變量生逸,但是如果是window.c就顯示undefined
*
* 2.創(chuàng)建的函數(shù)都會(huì)作為window對象的方法保存
*
*
*
*
* - 全局作用域中的變量都是全局變量,
* 在頁面的任意的部分都可以訪問的到
*
* 2.函數(shù)作用域(局部作用域)
*
*/
function fun(){
var a = 123;
}
fun();
consloe.log(a);
var a = 10;//這樣的就在全局作用域里,他的上一級(jí)就是script標(biāo)簽,他不在任何元素里
var b = 20;
//var c = "hello";
//console.log(window.c);
function fun(){
console.log("我是fun函數(shù)");
}
//window.fun();等同于fun();函數(shù)都會(huì)作為window對象的方法保存,所以方法和函數(shù)沒有區(qū)別,因?yàn)槎际莣indow對象的方法
//window.alert("hello");
</script>
</head>
<body>
</body>
</html>