1. 程式人生 > >js變數、作用域

js變數、作用域

// 基本型別:4 'str' true/false undefined null       變數不能修改    不能新增屬性
// 引用型別:[] {}                                                 變數可以修改

 

instanceof

檢測型別只能引用型別,不能基本型別consloe.log([] instanceof Array) consloe.log({} instanceof Object)     

// 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;
//...
//...
//...