变量,作用域问题
一,基本类型值和引用类型值
基本类型值:Undefined,Null,Number,Boolean,string
引用类型值:对象,数组
二,复制变量值
基本类型复制
var num1 = 1;
num1 | 1 |
---|---|
… | … |
… | … |
var num1 = 1;
var num2 = num1;
num1 | 1 |
---|---|
num2 | 1 |
… | … |
引用类型值
var obj1 = {};
var obj2 = obj1;
obj1.name= 'jasmine';
console.log(obj2);
三,传递参数
所有函数的值都是按值传递的。也就是说,把函数外部的值复制给函数内部的参数,就和把值从一个变量复制到另一个变量一样。
一,基本类型传参
var account = 10;
function addTen(num) {
num += 10;
return num; //important
}
account = addTen(account) //important
console.log(account)
这里的addTen()有一个参数num,而参数实际上是函数的局部变量。在调用这个函数的时候,变量account作为参数被传递给函数,于是20被复制给了参数num以便在函数中使用。参数num在函数中被加了10.但不影响account的值,参数num和变量account互不相识
一,引用类型传参
var obj = {
a: '1',
b: {
c: '1'
}
};
function changeObject(object) {
if (object.hasOwnProperty('b')) {
object.b.c = 3;
}
return object; // not important
}
changeObject(obj);
console.log(obj);
按值传递
var obj = {
amount: 1
}
function add(objN) {
objN.amount = 2;
objN= {};
objN.amount = 3;
return objN
}
add(obj)
console.log(obj);//2
四,深clone
function deepClone(object) {
var new_object = {};
for (var item in object) {
if (object.hasOwnProperty(item)) {
if (typeof object[item] === 'object') {
new_object[item] = deepClone(object[item]);
} else {
new_object[item] = object[item];
}
}
}
return new_object;
}
var object1 = {
name: 1,
car: {
color: 'red'
}
};
var object2 = deepClone(object1);
console.log(object2);
五,引用类型小方法
1,删除数组对象中的某一属性
var array = [
{a: 1, b: 2},
{a: 11, b: 22},
{a: 111, b: 2222},
{a: 1111, b: 22222},
{a: 11111, b: 222222}
];
var remove = function (key, array) {
var length = array.length;
while (length--) {
var objects = array[length];
for (var item in objects) {
if (objects.hasOwnProperty(item) && item === key) {
delete objects[item];
}
}
}
return array;
};
console.log(remove('b', array));
2,给某一地方添加某一元素的某一属性
var importElements = (...Elements) => {
for (var i = 0; i < Elements.length; i++) {
var Element = Elements[i];
var parentElement = document.querySelector(Element.parentSelector);
if (parentElement === null) {
throw new Error('Parent element not found.');
}
var element = document.createElement(Element.EleName);
var attributes = Element.attributes;
for (var item in attributes){
if (attributes.hasOwnProperty(item)) {
element.setAttribute(item, attributes[item])
}
}
parentElement.appendChild(element)
}
};
importElements({
parentSelector: 'body',
EleName: 'div',
attributes: {
href: '1',
id: '2',
'data-name': 1
}
}, {
parentSelector: 'body',
EleName: 'div',
attributes: {
href: '3',
id: '4',
}
});