js變數、作用域
// 基本型別:4 'str' true/false undefined null 變數不能修改 不能新增屬性
// 引用型別:[] {} 變數可以修改
instanceof
// instanceof
// console.log([] instanceof Array);
// console.log([] instanceof Object);
// console.log({} instanceof Object);
// console.log({} instanceof Array);
// 作用域鏈
// var name = 'xm';
// function fn() {
// var name = 'xh';
// var sex = 'male';
// function fn2() {
// var name = 'xhei';
// var age = 18;
// }
// }
// 延長作用域鏈
// var person = {};
// person.name = 'xm';
// person.sex = 'male';
// var score = 4;
// with(person) { //不推薦使用with
// name = 'xh';
// sex = 'female';
// score = 44;
// }
// console.log(person.name);
// console.log(person.sex);
// console.log(score);
垃圾收集機制
//垃圾收集機制:釋放無用的資料,回收記憶體
//自動
//JS
//手動
//Objective-C
//原理:找出沒用資料,打上標記,釋放其記憶體;週期性執行
//標識無用資料的策略
//標記清除
//環境中的變數
//引用計數
var xm = {
name: 'xm',
age: 18
}; // 1
var xh = xm; // 2
xh = {}; // 1
xm = {}; // 0
//網景Netscape
//迴圈引用
function fn(argument) {
var xm = {}; // 1
var xh = {}; // 1
}
fn();
xm = null; // 0
xh = null; // 0
function fn(argument) {
var xm = {}; // 1
var xh = {}; // 1
xm.wife = xh; // 2
xh.husband = xm; // 2
}
fn();
xm = null; // 1
xh = null; // 1
//IE
//JS:DOM和BOM
//C++ COM
var obj = {};
var elem = document.getElementById('box'); // DOM
elem.someAttr = obj;
obj.someProperty = elem;
elem.someAttr = null;
obj.someProperty = null;
//記憶體管理
//Web瀏覽器 < 桌面應用程式
//null
var arr = [...];
//...
//... // arr
arr = null;
//...
//...
//...