JavaScript 函數 方法&函數 區別 1. function 是更通用的概念,如數學、編程 2. method 是面向對象中的概念,一般與類或對象成對出現 關係 1. 對象的屬性可以是任意類型 2. 對象的屬性如果是函數類型,它就叫做這個對象的方法 3. 所以方法的本質還是函數 函數的調用 ...
JavaScript 函數
方法&函數
區別
- function 是更通用的概念,如數學、編程
- method 是面向對象中的概念,一般與類或對象成對出現
關係
- 對象的屬性可以是任意類型
- 對象的屬性如果是函數類型,它就叫做這個對象的方法
- 所以方法的本質還是函數
函數的調用
- fun()
- obj.fun()
- fun.call()
函數的屬性和方法
- name
- length
- toString
作用域
變數不是哪裡都可以使用
全局變數(跨文件)
var n = 1;
function fn(){
console.log(n); // 1
}
局部變數(只能在函數內部訪問)
function fn1(){
var n = 2;
}
console.log(n); // Uncaught ReferenceError: number is not defined
函數作用域
- 函數能獨立出一個作用域
var n = 1;
function f(){
var n = 2;
console.log(n); // 在當前作用域進行變數尋找
}
f();
console.log(n); // 在全局作用域進行變數尋找
- 函數裡面可以訪問函數外面
var n = 1;
var x = function(){
console.log(n);
};
function f(){
var n = 2;
x();
}
f();
- 自調用匿名函數
!function (){
var n = 1;
console.log(n);
};
~function (){
var n = 1;
console.log(n);
};
(function(){
var n = 1;
console.log(n);
}());
- 閉包
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>JS Bin</title>
</head>
<body>
<ul>
<li>aaa</li>
<li>bbb</li>
<li>ccc</li>
<li>ddd</li>
<li>eee</li>
</ul>
<script>
var items = document.getElementsByTagName('li'),
i = 0;
for (i; i < items.length; i++) {
items[i].onclick = function(e){
alert(i);
};
}
</script>
</body>
</html>
function fn1(){
var a = 1;
function fn2(){
a += 1;
console.log(a);
}
return fn2;
}
var r = fn1();
r(); // 2
r(); // 3
r(); // 4
- 回調(callback)給別人調用的函數
function trySomething(callback){
console.log('some thing');
callback('成功');
}
trySomething(function(value){
console.log(value);
});
setTimeout(callback, time),一段時間後將 callback 放入執行清單
JavaScript 引擎做完手頭的事情才會去看執行清單
同步
console.log(1); console.log(2); console.log(3);
非同步
console.log(1);
setTimeout(function(){
console.log(2);
},0);
console.log(3);