JavaScript 고급(함수 BOM DOM)
함수 표현식
var a = function (){
console.log(arguments.callee);
console.log(arguments.callee.name);
};
var a2=a;
a2();// (a) a
var b = function fn(){
console.log(arguments.callee);
console.log(arguments.callee.name);
};
var b2=b;
b2();// fn fn
function c(){
console.log(arguments.callee);
console.log(arguments.callee.name);
};
var c2=c;
c2();// c c
var b = 10;
(function b() {
b = 20;
console.log(b);//function b
})()
console.log(b);//10
차례로 돌아가다
가방을 닫다
function assignHandler(){
var element = document.getElementById("someElement");
element.onclick = function(){
alert(element.id);
};
}
function assignHandler(){
var element = document.getElementById("someElement");
var id = element.id;
element.onclick = function(){
alert(id);
};
element = null;
}
익명 패키지
function outputNumbers(count){
(function () {
for (var i=0; i < count; i++){
alert(i);
}
})();
alert(i); // !
}
개인 변수
공공 인터페이스: 개인 변수에 접근하는 경로
함수 이벤트 호출
onclick='return fn()' ;
function fn(){
return false;
}
BOM
전역 변수를 버리면 윈도우 대상의 속성이 됩니다. 전역 변수를 정의하는 것은 윈도우 대상에서 속성을 직접 정의하는 것과 약간의 차이가 있습니다.
DOM
DOM 작업의 성능 최적화
for (var i=0, len=values.length; i < len; i++){
ul.innerHTML += "" + values[i] + " "; // !!
}
var itemsHtml = "";
for (var i=0, len=values.length; i < len; i++){
itemsHtml += "" + values[i] + " ";
}
ul.innerHTML = itemsHtml;
양식 작업
var form = document.getElementById("myForm");
//
form.submit();
submit () 방법을 호출하는 형식으로 폼을 제출할 때submit 이벤트를 터치하지 않기 때문에 이 방법을 호출하기 전에 폼 데이터를 검증하는 것을 기억하십시오.
seal 및 freeze Object.isFrozen()
및 Object.isSealed()
판단에 사용
Object.seal Object.seal()
과Object.freeze()
는 약간 다르다.Object.seal()
기존 속성을 설정할 수 있지만 새 속성을 추가할 수 없으며 기존 속성을 삭제할 수 없습니다.
Object.freeze
Object.freeze()
는 객체를 매개변수로 받아들여 불변으로 만들고 반환합니다.이것은 우리가 대상의 모든 속성을 추가하거나 삭제하거나 변경할 수 없다는 것을 의미한다.const
과Object.freeze()
는 다르다. const는 변수의 재분배를 방지하고 Object.freeze()
는 얕은 동결로 대상이 불가변성을 가지게 하며 그 원형을 다시 지정할 수 없다.var obj = { name: "hello", deepObj: { name: "deep" } };
var freezeObj = Object.freeze(obj);
obj.name = "world";
obj.deepObj = {};
obj.deepObj.age = 18;
console.log(obj, freezeObj, obj == freezeObj);
Object.assign({}, obj);
깊이 동결하다
중첩된 속성이 있는 대상을 완전히 동결하려면 자신의 라이브러리를 작성하거나 기존 라이브러리를 사용하여 Deepfreeze나 immutable-js, 또는
// .
function deepFreeze(obj) {
// obj
var propNames = Object.getOwnPropertyNames(obj);
//
propNames.forEach(function(name) {
var prop = obj[name];
// prop ,
if (typeof prop == 'object' && prop !== null)
deepFreeze(prop);
});
// (no-op if already frozen)
return Object.freeze(obj);
}
Vue 최적화
data
옵션을 사용하면 Vue는 이 객체의 모든 속성을 훑어보고 Object를 사용합니다.defineProperty는 이 속성들을 모두 getter/setter로 전환합니다. 이 getter/setter는 사용자에게 보이지 않지만 내부에서 Vue 추적에 의존하게 하고 속성이 접근하고 수정될 때 변화를 알립니다.그러나 Vue는 Object.freeze()
처럼 설정할 수 없는 대상의 속성으로 설정되었을 때 대상에 settergetter 등 데이터 납치 방법을 추가하지 않기 때문에observer의 비용을 줄였다.이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.