JS 함수 및 역할 영역 문제
1. 함수 표현식을 즉시 실행하는 것은 무엇입니까?무슨 작용이 있느냐
함수 표현식은
일반적인 쓰기 방법: (function () {alert ('익명 함수')} ()
왜 한 쌍의 괄호로 익명 함수를 싸야 합니까?괄호를 넣지 않고 function () {alert ('익명 함수')} () 로 쓰면 오류가 발생합니다. function 키워드가 줄에 나타나서 일률적으로 문장으로 해석되기 때문입니다.따라서 자바스크립트 엔진은 줄의 첫 번째가 function 키워드인 것을 보고 이 단락은 함수의 정의이며 괄호로 끝내서는 안 된다고 생각해서 잘못 보고했습니다.해결 방법은 function이 줄에 나타나지 않도록 하는 것이다. 따라서 물건을 추가할 수 있다. 다음과 같은 방법이 있다.
(function(){alert(' ')} ()) //
(function(){alert(' ')}) () //
!function(){alert(' ')}() // , , 。
+function(){alert(' ')}()
-function(){alert(' ')}()
~function(){alert(' ')}()
void function(){alert(' ')}()
new function(){alert(' ')}()
그러면 함수 표현식을 즉각 집행하는 것은 어떤 작용을 합니까?역할은 독립된 역할 영역을 만드는 것입니다.이 작용역 안의 변수는 바깥에 접근할 수 없기 때문에 변수 오염을 피할 수 있다
2. 제발!,귀속으로 실현하다 function recursion(n) {
if (n === 1) {
return 1;
}
return n * recursion(n-1);
}
var result = recursion(10);
console.log(result); // n 10 , :3628800
3. 다음 코드는 무엇을 출력합니까? function getInfo(name, age, sex){
console.log('name:',name);
console.log('age:', age);
console.log('sex:', sex);
console.log(arguments);
arguments[0] = 'valley';
console.log('name', name);
}
getInfo(' ', 2, ' ');
getInfo(' ', 3);
getInfo(' ');
get Info('굶주린 계곡', 2,'남') 출력 호출:name:
age: 2
sex:
[" ",2," "]
name valley
getInfo 호출('작은 골짜기', 3) 출력name:
age: 3
sex: undefined
[" ",3]
name valley
getInfo('남') 출력 호출:name:
age: undefined
sex: undefined
[" "]
name valley
주: 1.함수에 매개 변수를 전송할 때는 순서대로 전송하고, 매개 변수가 없으면 undefined입니다.2. 함수 내부에서arguments 대상을 사용하여 이 함수에 전송된 모든 매개 변수를 얻을 수 있다
4. 함수를 써서 매개 변수의 제곱을 되돌려줍니까? function sumOfSquares() {
var squaresSum= 0
var paraNum = arguments.length
for (var i = 0; i < paraNum; i++) {
squaresSum = squaresSum + arguments[i]*arguments[i]
}
return squaresSum
}
var result = sumOfSquares(2,3,4)
var result2 = sumOfSquares(1,3)
console.log(result) //29
console.log(result2) //10
주:arguments.length는 실삼에 전입된 개수를 대표한다
5. 아래 코드의 출력은?무엇 때문에 console.log(a);
var a = 1;
console.log(b);
출력:undefined
error(b is not defined)
주: JS에서 변수 성명이 앞당겨지기 때문에 상기 코드는var a
console.log(a); //undefined
a = 1;
console.log(b); // ,error
6. 다음 코드의 출력은?무엇 때문에 sayName('world');
sayAge(10);
function sayName(name){
console.log('hello ', name);
}
var sayAge = function(age){
console.log(age);
};
출력:hello world
error(sayAge is not a function)
주: JS의 함수 성명은 변수 성명과 마찬가지로 앞당겨지기 때문에 상기 코드는function sayName(name){
console.log('hello ', name);
}
var sayAge
sayName('world'); // hello world
sayAge(10); // ,sayAge
sayAge = function(age){
console.log(age);
};
7. 다음 코드는 무엇을 출력합니까?무엇 때문에 var x = 10
bar()
function foo() {
console.log(x)
}
function bar(){
var x = 30
foo()
}
출력 결과: 10 이유: 1.우선foo()와bar() 함수의 성명이 앞당겨지기 때문에bar()는 정상적으로 실행할 수 있습니다.이어서 bar () 는 foo () 를 호출했고, foo () 는 x 3을 출력했습니다.foo() 함수 내부에서 x 변수를 찾지 못했습니다. 이때 JS는 이 함수가 있는 역할을 설명하는 영역에서 찾아 위로 올라갑니다. (위 코드에서 가장 바깥쪽에 있는 x, 즉 10)
8. 다음 코드는 무엇을 출력합니까?무엇 때문에 var x = 10;
bar()
function bar(){
var x = 30;
function foo(){
console.log(x)
}
foo();
}
출력 결과: 30 이유와 같이foo()가 표시하는 작용역의 x의 값은 30
9. 다음 코드는 무엇을 출력합니까?무엇 때문에 var a = 1
function fn1(){
function fn2(){
console.log(a)
}
function fn3(){
var a = 4
fn2()
}
var a = 2
return fn3
}
var fn = fn1()
fn() //
출력 결과: 2 이유 동제 7, fn2 () 성명이 있는 작용역의 a의 값은 2
10. 다음 코드는 무엇을 출력합니까?무엇 때문에 var a = 1
function fn1(){
function fn3(){
var a = 4
fn2()
}
var a = 2
return fn3
}
function fn2(){
console.log(a)
}
var fn = fn1()
fn() //
출력 결과: 1 이유 동제 7, fn2 () 성명이 있는 작용역의 a의 값은 1
11. 다음 코드는 무엇을 출력합니까?무엇 때문에 var a = 1
function fn1(){
function fn3(){
function fn2(){
console.log(a)
}
fn2()
var a = 4
}
var a = 2
return fn3
}
var fn = fn1()
fn() //
출력 결과는 다음과 같다. undefined 이 문제는 특히 주의해야 한다. 이 문제와 위의 차이점은 변수가 앞당겨져서 fn2()의 집행은 a변수가 성명한 후에 값을 부여하기 전(a는 이때 성명만 하고 값을 부여하지 않았기 때문에 undefined), 즉 함수 fn3의 실제 집행은 다음과 같다. function fn3(){
function fn2(){
console.log(a)
}
var a
fn2()
a = 4
}
12. 다음 코드는 무엇을 출력합니까?무엇 때문에 var obj1 = {a:1, b:2};
var obj2 = {a:1, b:2};
console.log(obj1 == obj2);
console.log(obj1 = obj2);
console.log(obj1 == obj2);
출력:false
{a: 1, b: 2}
true
이유: 대상의 상등, 그들의 인용이 메모리의 같은 구역을 가리킬 때만 상등하다. 즉, 그들이 창고 메모리에 있는 인용 주소가 같은obj1과obj2는 각각 두 개의 다른 대상 인용이다. 그 안에 저장된 주소는 다르다. 즉, 그들이 가리키는 구역은 다르다. 실시간 구역의 내용은 같고 같지 않기 때문에obj1=obj2를 통해obj2에 저장된 주소를obj1에게 부여한 후에obj1과obj2는 같은 구역을 가리키기 때문에 마지막에 둘은 같다
13. 다음 코드는 무엇을 출력합니까?무엇 때문에 var a = 1
var c = { name: 'jirengu', age: 2 }
function f1(n){
++n
}
function f2(obj){
++obj.age
}
f1(a)
f2(c)
f1(c.age)
console.log(a)
console.log(c)
출력:1
{name: "jirengu", age: 3}
이유: a는 실삼으로 f1의 형삼 n에게 전달되었는데 a의 값을 n에게 부여한 다음에 +n, 그리고 n의 값을 2로 바꾸는 것과 같다. a의 값은 여전히 1c로 실삼으로 f2의 형삼 obj에 전달되었다. c는 하나의 대상이다. 그 안에 저장된 것은 그 안에 있는 내용이 있는 메모리 구역의 주소를 가리키고 f2에서 이 주소가 가리키는 메모리 구역 안의age를 전++로 한다.그래서 이 메모리 영역에서age의 실제 값을 바꾸었다. 즉age는 마지막에 3을 얻어 c.age를 실참으로 f1의 형삼 n에게 전달했고 여전히age를 하나의 값으로 n에게 부여했다. age 자체의 주를 바꾸지 않았다. 값의 전달은 그 자체를 바꿀 수 없고 인용된 전달이 있어야 한다.
14. 딥 카피 함수 쓰기
얕은 복사: 문자열 유형에 대해 얕은 복사는 값에 대한 복사이고 대상에 대해 얕은 복사는 대상 주소에 대한 복사이며 새로운 창고를 열지 않았다. 즉, 복사의 결과는 두 대상이 같은 주소를 가리키고 그 중의 한 대상의 속성을 수정하면 다른 대상의 속성도 바뀐다.얕은 복사본의 경우 하위 객체와 하위 객체 아래의 객체가 모두 공용됩니다.간단한 복제 구현 함수:var oldObject = {name:" ",
age:25,
sex:" ",
city:" ",
wife:{name:" ", sex:" ", age:24, city:" "},
friends:[" ", " ", " "]
}
function shallowCopy(oldObj) {
var newObj = {}
for (var i in oldObj) {
if (oldObj.hasOwnProperty(i)) { //hasOwnProperty() ( ) 。 , true, false
newObj[i] = oldObj[i]
}
}
return newObj
}
var newObject = shallowCopy(oldObject)
console.log(newObject) //newObject oldObject
console.log(newObject.wife == oldObject.wife) //true
console.log(newObject.friends == oldObject.friends) //true, true newObject , oldObject
깊은 복사: 깊은 복사는 새로운 창고를 개척하는 것이다. 두 대상은 두 개의 서로 다른 주소, 즉 더미 속의 서로 다른 공간을 가리키며 한 대상의 속성을 수정하면 다른 대상의 속성을 바꾸지 않는다.심층 복사는 하위 객체와 하위 객체 아래의 객체를 복제하며 새 객체와 이전 객체는 공통 영역이 아닙니다.딥 카피 구현 함수:var oldObject = {name:" ",
age:25,
sex:" ",
city:" ",
wife:{name:" ", sex:" ", age:24, city:" "},
friends:[" ", " ", " "]
}
function deepCopy(oldObj) {
var newObj = {}
for (var key in oldObj) {
if (typeof oldObj[key] === 'object') {
newObj[key] = deepCopy(oldObj[key]) //
} else {
newObj[key] = oldObj[key] //
}
}
return newObj
}
var newObject = deepCopy(oldObject)
console.log(newObject) //newObject oldObject
console.log(newObject.wife == oldObject.wife) //false
console.log(newObject.friends == oldObject.friends) //false, false newObject , oldObject
자바스크립트의 깊은 복사와 얕은 복사에 대한 대답을 참고하시겠습니까?무엇이 즉시 실행 함수입니까?무슨 작용이 있습니까?
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSON
JSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다.
그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다.
저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.
function recursion(n) {
if (n === 1) {
return 1;
}
return n * recursion(n-1);
}
var result = recursion(10);
console.log(result); // n 10 , :3628800
function getInfo(name, age, sex){
console.log('name:',name);
console.log('age:', age);
console.log('sex:', sex);
console.log(arguments);
arguments[0] = 'valley';
console.log('name', name);
}
getInfo(' ', 2, ' ');
getInfo(' ', 3);
getInfo(' ');
get Info('굶주린 계곡', 2,'남') 출력 호출:
name:
age: 2
sex:
[" ",2," "]
name valley
getInfo 호출('작은 골짜기', 3) 출력
name:
age: 3
sex: undefined
[" ",3]
name valley
getInfo('남') 출력 호출:
name:
age: undefined
sex: undefined
[" "]
name valley
주: 1.함수에 매개 변수를 전송할 때는 순서대로 전송하고, 매개 변수가 없으면 undefined입니다.2. 함수 내부에서arguments 대상을 사용하여 이 함수에 전송된 모든 매개 변수를 얻을 수 있다
4. 함수를 써서 매개 변수의 제곱을 되돌려줍니까? function sumOfSquares() {
var squaresSum= 0
var paraNum = arguments.length
for (var i = 0; i < paraNum; i++) {
squaresSum = squaresSum + arguments[i]*arguments[i]
}
return squaresSum
}
var result = sumOfSquares(2,3,4)
var result2 = sumOfSquares(1,3)
console.log(result) //29
console.log(result2) //10
주:arguments.length는 실삼에 전입된 개수를 대표한다
5. 아래 코드의 출력은?무엇 때문에 console.log(a);
var a = 1;
console.log(b);
출력:undefined
error(b is not defined)
주: JS에서 변수 성명이 앞당겨지기 때문에 상기 코드는var a
console.log(a); //undefined
a = 1;
console.log(b); // ,error
6. 다음 코드의 출력은?무엇 때문에 sayName('world');
sayAge(10);
function sayName(name){
console.log('hello ', name);
}
var sayAge = function(age){
console.log(age);
};
출력:hello world
error(sayAge is not a function)
주: JS의 함수 성명은 변수 성명과 마찬가지로 앞당겨지기 때문에 상기 코드는function sayName(name){
console.log('hello ', name);
}
var sayAge
sayName('world'); // hello world
sayAge(10); // ,sayAge
sayAge = function(age){
console.log(age);
};
7. 다음 코드는 무엇을 출력합니까?무엇 때문에 var x = 10
bar()
function foo() {
console.log(x)
}
function bar(){
var x = 30
foo()
}
출력 결과: 10 이유: 1.우선foo()와bar() 함수의 성명이 앞당겨지기 때문에bar()는 정상적으로 실행할 수 있습니다.이어서 bar () 는 foo () 를 호출했고, foo () 는 x 3을 출력했습니다.foo() 함수 내부에서 x 변수를 찾지 못했습니다. 이때 JS는 이 함수가 있는 역할을 설명하는 영역에서 찾아 위로 올라갑니다. (위 코드에서 가장 바깥쪽에 있는 x, 즉 10)
8. 다음 코드는 무엇을 출력합니까?무엇 때문에 var x = 10;
bar()
function bar(){
var x = 30;
function foo(){
console.log(x)
}
foo();
}
출력 결과: 30 이유와 같이foo()가 표시하는 작용역의 x의 값은 30
9. 다음 코드는 무엇을 출력합니까?무엇 때문에 var a = 1
function fn1(){
function fn2(){
console.log(a)
}
function fn3(){
var a = 4
fn2()
}
var a = 2
return fn3
}
var fn = fn1()
fn() //
출력 결과: 2 이유 동제 7, fn2 () 성명이 있는 작용역의 a의 값은 2
10. 다음 코드는 무엇을 출력합니까?무엇 때문에 var a = 1
function fn1(){
function fn3(){
var a = 4
fn2()
}
var a = 2
return fn3
}
function fn2(){
console.log(a)
}
var fn = fn1()
fn() //
출력 결과: 1 이유 동제 7, fn2 () 성명이 있는 작용역의 a의 값은 1
11. 다음 코드는 무엇을 출력합니까?무엇 때문에 var a = 1
function fn1(){
function fn3(){
function fn2(){
console.log(a)
}
fn2()
var a = 4
}
var a = 2
return fn3
}
var fn = fn1()
fn() //
출력 결과는 다음과 같다. undefined 이 문제는 특히 주의해야 한다. 이 문제와 위의 차이점은 변수가 앞당겨져서 fn2()의 집행은 a변수가 성명한 후에 값을 부여하기 전(a는 이때 성명만 하고 값을 부여하지 않았기 때문에 undefined), 즉 함수 fn3의 실제 집행은 다음과 같다. function fn3(){
function fn2(){
console.log(a)
}
var a
fn2()
a = 4
}
12. 다음 코드는 무엇을 출력합니까?무엇 때문에 var obj1 = {a:1, b:2};
var obj2 = {a:1, b:2};
console.log(obj1 == obj2);
console.log(obj1 = obj2);
console.log(obj1 == obj2);
출력:false
{a: 1, b: 2}
true
이유: 대상의 상등, 그들의 인용이 메모리의 같은 구역을 가리킬 때만 상등하다. 즉, 그들이 창고 메모리에 있는 인용 주소가 같은obj1과obj2는 각각 두 개의 다른 대상 인용이다. 그 안에 저장된 주소는 다르다. 즉, 그들이 가리키는 구역은 다르다. 실시간 구역의 내용은 같고 같지 않기 때문에obj1=obj2를 통해obj2에 저장된 주소를obj1에게 부여한 후에obj1과obj2는 같은 구역을 가리키기 때문에 마지막에 둘은 같다
13. 다음 코드는 무엇을 출력합니까?무엇 때문에 var a = 1
var c = { name: 'jirengu', age: 2 }
function f1(n){
++n
}
function f2(obj){
++obj.age
}
f1(a)
f2(c)
f1(c.age)
console.log(a)
console.log(c)
출력:1
{name: "jirengu", age: 3}
이유: a는 실삼으로 f1의 형삼 n에게 전달되었는데 a의 값을 n에게 부여한 다음에 +n, 그리고 n의 값을 2로 바꾸는 것과 같다. a의 값은 여전히 1c로 실삼으로 f2의 형삼 obj에 전달되었다. c는 하나의 대상이다. 그 안에 저장된 것은 그 안에 있는 내용이 있는 메모리 구역의 주소를 가리키고 f2에서 이 주소가 가리키는 메모리 구역 안의age를 전++로 한다.그래서 이 메모리 영역에서age의 실제 값을 바꾸었다. 즉age는 마지막에 3을 얻어 c.age를 실참으로 f1의 형삼 n에게 전달했고 여전히age를 하나의 값으로 n에게 부여했다. age 자체의 주를 바꾸지 않았다. 값의 전달은 그 자체를 바꿀 수 없고 인용된 전달이 있어야 한다.
14. 딥 카피 함수 쓰기
얕은 복사: 문자열 유형에 대해 얕은 복사는 값에 대한 복사이고 대상에 대해 얕은 복사는 대상 주소에 대한 복사이며 새로운 창고를 열지 않았다. 즉, 복사의 결과는 두 대상이 같은 주소를 가리키고 그 중의 한 대상의 속성을 수정하면 다른 대상의 속성도 바뀐다.얕은 복사본의 경우 하위 객체와 하위 객체 아래의 객체가 모두 공용됩니다.간단한 복제 구현 함수:var oldObject = {name:" ",
age:25,
sex:" ",
city:" ",
wife:{name:" ", sex:" ", age:24, city:" "},
friends:[" ", " ", " "]
}
function shallowCopy(oldObj) {
var newObj = {}
for (var i in oldObj) {
if (oldObj.hasOwnProperty(i)) { //hasOwnProperty() ( ) 。 , true, false
newObj[i] = oldObj[i]
}
}
return newObj
}
var newObject = shallowCopy(oldObject)
console.log(newObject) //newObject oldObject
console.log(newObject.wife == oldObject.wife) //true
console.log(newObject.friends == oldObject.friends) //true, true newObject , oldObject
깊은 복사: 깊은 복사는 새로운 창고를 개척하는 것이다. 두 대상은 두 개의 서로 다른 주소, 즉 더미 속의 서로 다른 공간을 가리키며 한 대상의 속성을 수정하면 다른 대상의 속성을 바꾸지 않는다.심층 복사는 하위 객체와 하위 객체 아래의 객체를 복제하며 새 객체와 이전 객체는 공통 영역이 아닙니다.딥 카피 구현 함수:var oldObject = {name:" ",
age:25,
sex:" ",
city:" ",
wife:{name:" ", sex:" ", age:24, city:" "},
friends:[" ", " ", " "]
}
function deepCopy(oldObj) {
var newObj = {}
for (var key in oldObj) {
if (typeof oldObj[key] === 'object') {
newObj[key] = deepCopy(oldObj[key]) //
} else {
newObj[key] = oldObj[key] //
}
}
return newObj
}
var newObject = deepCopy(oldObject)
console.log(newObject) //newObject oldObject
console.log(newObject.wife == oldObject.wife) //false
console.log(newObject.friends == oldObject.friends) //false, false newObject , oldObject
자바스크립트의 깊은 복사와 얕은 복사에 대한 대답을 참고하시겠습니까?무엇이 즉시 실행 함수입니까?무슨 작용이 있습니까?
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSON
JSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다.
그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다.
저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.
function sumOfSquares() {
var squaresSum= 0
var paraNum = arguments.length
for (var i = 0; i < paraNum; i++) {
squaresSum = squaresSum + arguments[i]*arguments[i]
}
return squaresSum
}
var result = sumOfSquares(2,3,4)
var result2 = sumOfSquares(1,3)
console.log(result) //29
console.log(result2) //10
console.log(a);
var a = 1;
console.log(b);
출력:
undefined
error(b is not defined)
주: JS에서 변수 성명이 앞당겨지기 때문에 상기 코드는
var a
console.log(a); //undefined
a = 1;
console.log(b); // ,error
6. 다음 코드의 출력은?무엇 때문에 sayName('world');
sayAge(10);
function sayName(name){
console.log('hello ', name);
}
var sayAge = function(age){
console.log(age);
};
출력:hello world
error(sayAge is not a function)
주: JS의 함수 성명은 변수 성명과 마찬가지로 앞당겨지기 때문에 상기 코드는function sayName(name){
console.log('hello ', name);
}
var sayAge
sayName('world'); // hello world
sayAge(10); // ,sayAge
sayAge = function(age){
console.log(age);
};
7. 다음 코드는 무엇을 출력합니까?무엇 때문에 var x = 10
bar()
function foo() {
console.log(x)
}
function bar(){
var x = 30
foo()
}
출력 결과: 10 이유: 1.우선foo()와bar() 함수의 성명이 앞당겨지기 때문에bar()는 정상적으로 실행할 수 있습니다.이어서 bar () 는 foo () 를 호출했고, foo () 는 x 3을 출력했습니다.foo() 함수 내부에서 x 변수를 찾지 못했습니다. 이때 JS는 이 함수가 있는 역할을 설명하는 영역에서 찾아 위로 올라갑니다. (위 코드에서 가장 바깥쪽에 있는 x, 즉 10)
8. 다음 코드는 무엇을 출력합니까?무엇 때문에 var x = 10;
bar()
function bar(){
var x = 30;
function foo(){
console.log(x)
}
foo();
}
출력 결과: 30 이유와 같이foo()가 표시하는 작용역의 x의 값은 30
9. 다음 코드는 무엇을 출력합니까?무엇 때문에 var a = 1
function fn1(){
function fn2(){
console.log(a)
}
function fn3(){
var a = 4
fn2()
}
var a = 2
return fn3
}
var fn = fn1()
fn() //
출력 결과: 2 이유 동제 7, fn2 () 성명이 있는 작용역의 a의 값은 2
10. 다음 코드는 무엇을 출력합니까?무엇 때문에 var a = 1
function fn1(){
function fn3(){
var a = 4
fn2()
}
var a = 2
return fn3
}
function fn2(){
console.log(a)
}
var fn = fn1()
fn() //
출력 결과: 1 이유 동제 7, fn2 () 성명이 있는 작용역의 a의 값은 1
11. 다음 코드는 무엇을 출력합니까?무엇 때문에 var a = 1
function fn1(){
function fn3(){
function fn2(){
console.log(a)
}
fn2()
var a = 4
}
var a = 2
return fn3
}
var fn = fn1()
fn() //
출력 결과는 다음과 같다. undefined 이 문제는 특히 주의해야 한다. 이 문제와 위의 차이점은 변수가 앞당겨져서 fn2()의 집행은 a변수가 성명한 후에 값을 부여하기 전(a는 이때 성명만 하고 값을 부여하지 않았기 때문에 undefined), 즉 함수 fn3의 실제 집행은 다음과 같다. function fn3(){
function fn2(){
console.log(a)
}
var a
fn2()
a = 4
}
12. 다음 코드는 무엇을 출력합니까?무엇 때문에 var obj1 = {a:1, b:2};
var obj2 = {a:1, b:2};
console.log(obj1 == obj2);
console.log(obj1 = obj2);
console.log(obj1 == obj2);
출력:false
{a: 1, b: 2}
true
이유: 대상의 상등, 그들의 인용이 메모리의 같은 구역을 가리킬 때만 상등하다. 즉, 그들이 창고 메모리에 있는 인용 주소가 같은obj1과obj2는 각각 두 개의 다른 대상 인용이다. 그 안에 저장된 주소는 다르다. 즉, 그들이 가리키는 구역은 다르다. 실시간 구역의 내용은 같고 같지 않기 때문에obj1=obj2를 통해obj2에 저장된 주소를obj1에게 부여한 후에obj1과obj2는 같은 구역을 가리키기 때문에 마지막에 둘은 같다
13. 다음 코드는 무엇을 출력합니까?무엇 때문에 var a = 1
var c = { name: 'jirengu', age: 2 }
function f1(n){
++n
}
function f2(obj){
++obj.age
}
f1(a)
f2(c)
f1(c.age)
console.log(a)
console.log(c)
출력:1
{name: "jirengu", age: 3}
이유: a는 실삼으로 f1의 형삼 n에게 전달되었는데 a의 값을 n에게 부여한 다음에 +n, 그리고 n의 값을 2로 바꾸는 것과 같다. a의 값은 여전히 1c로 실삼으로 f2의 형삼 obj에 전달되었다. c는 하나의 대상이다. 그 안에 저장된 것은 그 안에 있는 내용이 있는 메모리 구역의 주소를 가리키고 f2에서 이 주소가 가리키는 메모리 구역 안의age를 전++로 한다.그래서 이 메모리 영역에서age의 실제 값을 바꾸었다. 즉age는 마지막에 3을 얻어 c.age를 실참으로 f1의 형삼 n에게 전달했고 여전히age를 하나의 값으로 n에게 부여했다. age 자체의 주를 바꾸지 않았다. 값의 전달은 그 자체를 바꿀 수 없고 인용된 전달이 있어야 한다.
14. 딥 카피 함수 쓰기
얕은 복사: 문자열 유형에 대해 얕은 복사는 값에 대한 복사이고 대상에 대해 얕은 복사는 대상 주소에 대한 복사이며 새로운 창고를 열지 않았다. 즉, 복사의 결과는 두 대상이 같은 주소를 가리키고 그 중의 한 대상의 속성을 수정하면 다른 대상의 속성도 바뀐다.얕은 복사본의 경우 하위 객체와 하위 객체 아래의 객체가 모두 공용됩니다.간단한 복제 구현 함수:var oldObject = {name:" ",
age:25,
sex:" ",
city:" ",
wife:{name:" ", sex:" ", age:24, city:" "},
friends:[" ", " ", " "]
}
function shallowCopy(oldObj) {
var newObj = {}
for (var i in oldObj) {
if (oldObj.hasOwnProperty(i)) { //hasOwnProperty() ( ) 。 , true, false
newObj[i] = oldObj[i]
}
}
return newObj
}
var newObject = shallowCopy(oldObject)
console.log(newObject) //newObject oldObject
console.log(newObject.wife == oldObject.wife) //true
console.log(newObject.friends == oldObject.friends) //true, true newObject , oldObject
깊은 복사: 깊은 복사는 새로운 창고를 개척하는 것이다. 두 대상은 두 개의 서로 다른 주소, 즉 더미 속의 서로 다른 공간을 가리키며 한 대상의 속성을 수정하면 다른 대상의 속성을 바꾸지 않는다.심층 복사는 하위 객체와 하위 객체 아래의 객체를 복제하며 새 객체와 이전 객체는 공통 영역이 아닙니다.딥 카피 구현 함수:var oldObject = {name:" ",
age:25,
sex:" ",
city:" ",
wife:{name:" ", sex:" ", age:24, city:" "},
friends:[" ", " ", " "]
}
function deepCopy(oldObj) {
var newObj = {}
for (var key in oldObj) {
if (typeof oldObj[key] === 'object') {
newObj[key] = deepCopy(oldObj[key]) //
} else {
newObj[key] = oldObj[key] //
}
}
return newObj
}
var newObject = deepCopy(oldObject)
console.log(newObject) //newObject oldObject
console.log(newObject.wife == oldObject.wife) //false
console.log(newObject.friends == oldObject.friends) //false, false newObject , oldObject
자바스크립트의 깊은 복사와 얕은 복사에 대한 대답을 참고하시겠습니까?무엇이 즉시 실행 함수입니까?무슨 작용이 있습니까?
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSON
JSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다.
그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다.
저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.
sayName('world');
sayAge(10);
function sayName(name){
console.log('hello ', name);
}
var sayAge = function(age){
console.log(age);
};
hello world
error(sayAge is not a function)
function sayName(name){
console.log('hello ', name);
}
var sayAge
sayName('world'); // hello world
sayAge(10); // ,sayAge
sayAge = function(age){
console.log(age);
};
var x = 10
bar()
function foo() {
console.log(x)
}
function bar(){
var x = 30
foo()
}
출력 결과: 10 이유: 1.우선foo()와bar() 함수의 성명이 앞당겨지기 때문에bar()는 정상적으로 실행할 수 있습니다.이어서 bar () 는 foo () 를 호출했고, foo () 는 x 3을 출력했습니다.foo() 함수 내부에서 x 변수를 찾지 못했습니다. 이때 JS는 이 함수가 있는 역할을 설명하는 영역에서 찾아 위로 올라갑니다. (위 코드에서 가장 바깥쪽에 있는 x, 즉 10)
8. 다음 코드는 무엇을 출력합니까?무엇 때문에 var x = 10;
bar()
function bar(){
var x = 30;
function foo(){
console.log(x)
}
foo();
}
출력 결과: 30 이유와 같이foo()가 표시하는 작용역의 x의 값은 30
9. 다음 코드는 무엇을 출력합니까?무엇 때문에 var a = 1
function fn1(){
function fn2(){
console.log(a)
}
function fn3(){
var a = 4
fn2()
}
var a = 2
return fn3
}
var fn = fn1()
fn() //
출력 결과: 2 이유 동제 7, fn2 () 성명이 있는 작용역의 a의 값은 2
10. 다음 코드는 무엇을 출력합니까?무엇 때문에 var a = 1
function fn1(){
function fn3(){
var a = 4
fn2()
}
var a = 2
return fn3
}
function fn2(){
console.log(a)
}
var fn = fn1()
fn() //
출력 결과: 1 이유 동제 7, fn2 () 성명이 있는 작용역의 a의 값은 1
11. 다음 코드는 무엇을 출력합니까?무엇 때문에 var a = 1
function fn1(){
function fn3(){
function fn2(){
console.log(a)
}
fn2()
var a = 4
}
var a = 2
return fn3
}
var fn = fn1()
fn() //
출력 결과는 다음과 같다. undefined 이 문제는 특히 주의해야 한다. 이 문제와 위의 차이점은 변수가 앞당겨져서 fn2()의 집행은 a변수가 성명한 후에 값을 부여하기 전(a는 이때 성명만 하고 값을 부여하지 않았기 때문에 undefined), 즉 함수 fn3의 실제 집행은 다음과 같다. function fn3(){
function fn2(){
console.log(a)
}
var a
fn2()
a = 4
}
12. 다음 코드는 무엇을 출력합니까?무엇 때문에 var obj1 = {a:1, b:2};
var obj2 = {a:1, b:2};
console.log(obj1 == obj2);
console.log(obj1 = obj2);
console.log(obj1 == obj2);
출력:false
{a: 1, b: 2}
true
이유: 대상의 상등, 그들의 인용이 메모리의 같은 구역을 가리킬 때만 상등하다. 즉, 그들이 창고 메모리에 있는 인용 주소가 같은obj1과obj2는 각각 두 개의 다른 대상 인용이다. 그 안에 저장된 주소는 다르다. 즉, 그들이 가리키는 구역은 다르다. 실시간 구역의 내용은 같고 같지 않기 때문에obj1=obj2를 통해obj2에 저장된 주소를obj1에게 부여한 후에obj1과obj2는 같은 구역을 가리키기 때문에 마지막에 둘은 같다
13. 다음 코드는 무엇을 출력합니까?무엇 때문에 var a = 1
var c = { name: 'jirengu', age: 2 }
function f1(n){
++n
}
function f2(obj){
++obj.age
}
f1(a)
f2(c)
f1(c.age)
console.log(a)
console.log(c)
출력:1
{name: "jirengu", age: 3}
이유: a는 실삼으로 f1의 형삼 n에게 전달되었는데 a의 값을 n에게 부여한 다음에 +n, 그리고 n의 값을 2로 바꾸는 것과 같다. a의 값은 여전히 1c로 실삼으로 f2의 형삼 obj에 전달되었다. c는 하나의 대상이다. 그 안에 저장된 것은 그 안에 있는 내용이 있는 메모리 구역의 주소를 가리키고 f2에서 이 주소가 가리키는 메모리 구역 안의age를 전++로 한다.그래서 이 메모리 영역에서age의 실제 값을 바꾸었다. 즉age는 마지막에 3을 얻어 c.age를 실참으로 f1의 형삼 n에게 전달했고 여전히age를 하나의 값으로 n에게 부여했다. age 자체의 주를 바꾸지 않았다. 값의 전달은 그 자체를 바꿀 수 없고 인용된 전달이 있어야 한다.
14. 딥 카피 함수 쓰기
얕은 복사: 문자열 유형에 대해 얕은 복사는 값에 대한 복사이고 대상에 대해 얕은 복사는 대상 주소에 대한 복사이며 새로운 창고를 열지 않았다. 즉, 복사의 결과는 두 대상이 같은 주소를 가리키고 그 중의 한 대상의 속성을 수정하면 다른 대상의 속성도 바뀐다.얕은 복사본의 경우 하위 객체와 하위 객체 아래의 객체가 모두 공용됩니다.간단한 복제 구현 함수:var oldObject = {name:" ",
age:25,
sex:" ",
city:" ",
wife:{name:" ", sex:" ", age:24, city:" "},
friends:[" ", " ", " "]
}
function shallowCopy(oldObj) {
var newObj = {}
for (var i in oldObj) {
if (oldObj.hasOwnProperty(i)) { //hasOwnProperty() ( ) 。 , true, false
newObj[i] = oldObj[i]
}
}
return newObj
}
var newObject = shallowCopy(oldObject)
console.log(newObject) //newObject oldObject
console.log(newObject.wife == oldObject.wife) //true
console.log(newObject.friends == oldObject.friends) //true, true newObject , oldObject
깊은 복사: 깊은 복사는 새로운 창고를 개척하는 것이다. 두 대상은 두 개의 서로 다른 주소, 즉 더미 속의 서로 다른 공간을 가리키며 한 대상의 속성을 수정하면 다른 대상의 속성을 바꾸지 않는다.심층 복사는 하위 객체와 하위 객체 아래의 객체를 복제하며 새 객체와 이전 객체는 공통 영역이 아닙니다.딥 카피 구현 함수:var oldObject = {name:" ",
age:25,
sex:" ",
city:" ",
wife:{name:" ", sex:" ", age:24, city:" "},
friends:[" ", " ", " "]
}
function deepCopy(oldObj) {
var newObj = {}
for (var key in oldObj) {
if (typeof oldObj[key] === 'object') {
newObj[key] = deepCopy(oldObj[key]) //
} else {
newObj[key] = oldObj[key] //
}
}
return newObj
}
var newObject = deepCopy(oldObject)
console.log(newObject) //newObject oldObject
console.log(newObject.wife == oldObject.wife) //false
console.log(newObject.friends == oldObject.friends) //false, false newObject , oldObject
자바스크립트의 깊은 복사와 얕은 복사에 대한 대답을 참고하시겠습니까?무엇이 즉시 실행 함수입니까?무슨 작용이 있습니까?
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSON
JSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다.
그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다.
저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.
var x = 10;
bar()
function bar(){
var x = 30;
function foo(){
console.log(x)
}
foo();
}
var a = 1
function fn1(){
function fn2(){
console.log(a)
}
function fn3(){
var a = 4
fn2()
}
var a = 2
return fn3
}
var fn = fn1()
fn() //
출력 결과: 2 이유 동제 7, fn2 () 성명이 있는 작용역의 a의 값은 2
10. 다음 코드는 무엇을 출력합니까?무엇 때문에 var a = 1
function fn1(){
function fn3(){
var a = 4
fn2()
}
var a = 2
return fn3
}
function fn2(){
console.log(a)
}
var fn = fn1()
fn() //
출력 결과: 1 이유 동제 7, fn2 () 성명이 있는 작용역의 a의 값은 1
11. 다음 코드는 무엇을 출력합니까?무엇 때문에 var a = 1
function fn1(){
function fn3(){
function fn2(){
console.log(a)
}
fn2()
var a = 4
}
var a = 2
return fn3
}
var fn = fn1()
fn() //
출력 결과는 다음과 같다. undefined 이 문제는 특히 주의해야 한다. 이 문제와 위의 차이점은 변수가 앞당겨져서 fn2()의 집행은 a변수가 성명한 후에 값을 부여하기 전(a는 이때 성명만 하고 값을 부여하지 않았기 때문에 undefined), 즉 함수 fn3의 실제 집행은 다음과 같다. function fn3(){
function fn2(){
console.log(a)
}
var a
fn2()
a = 4
}
12. 다음 코드는 무엇을 출력합니까?무엇 때문에 var obj1 = {a:1, b:2};
var obj2 = {a:1, b:2};
console.log(obj1 == obj2);
console.log(obj1 = obj2);
console.log(obj1 == obj2);
출력:false
{a: 1, b: 2}
true
이유: 대상의 상등, 그들의 인용이 메모리의 같은 구역을 가리킬 때만 상등하다. 즉, 그들이 창고 메모리에 있는 인용 주소가 같은obj1과obj2는 각각 두 개의 다른 대상 인용이다. 그 안에 저장된 주소는 다르다. 즉, 그들이 가리키는 구역은 다르다. 실시간 구역의 내용은 같고 같지 않기 때문에obj1=obj2를 통해obj2에 저장된 주소를obj1에게 부여한 후에obj1과obj2는 같은 구역을 가리키기 때문에 마지막에 둘은 같다
13. 다음 코드는 무엇을 출력합니까?무엇 때문에 var a = 1
var c = { name: 'jirengu', age: 2 }
function f1(n){
++n
}
function f2(obj){
++obj.age
}
f1(a)
f2(c)
f1(c.age)
console.log(a)
console.log(c)
출력:1
{name: "jirengu", age: 3}
이유: a는 실삼으로 f1의 형삼 n에게 전달되었는데 a의 값을 n에게 부여한 다음에 +n, 그리고 n의 값을 2로 바꾸는 것과 같다. a의 값은 여전히 1c로 실삼으로 f2의 형삼 obj에 전달되었다. c는 하나의 대상이다. 그 안에 저장된 것은 그 안에 있는 내용이 있는 메모리 구역의 주소를 가리키고 f2에서 이 주소가 가리키는 메모리 구역 안의age를 전++로 한다.그래서 이 메모리 영역에서age의 실제 값을 바꾸었다. 즉age는 마지막에 3을 얻어 c.age를 실참으로 f1의 형삼 n에게 전달했고 여전히age를 하나의 값으로 n에게 부여했다. age 자체의 주를 바꾸지 않았다. 값의 전달은 그 자체를 바꿀 수 없고 인용된 전달이 있어야 한다.
14. 딥 카피 함수 쓰기
얕은 복사: 문자열 유형에 대해 얕은 복사는 값에 대한 복사이고 대상에 대해 얕은 복사는 대상 주소에 대한 복사이며 새로운 창고를 열지 않았다. 즉, 복사의 결과는 두 대상이 같은 주소를 가리키고 그 중의 한 대상의 속성을 수정하면 다른 대상의 속성도 바뀐다.얕은 복사본의 경우 하위 객체와 하위 객체 아래의 객체가 모두 공용됩니다.간단한 복제 구현 함수:var oldObject = {name:" ",
age:25,
sex:" ",
city:" ",
wife:{name:" ", sex:" ", age:24, city:" "},
friends:[" ", " ", " "]
}
function shallowCopy(oldObj) {
var newObj = {}
for (var i in oldObj) {
if (oldObj.hasOwnProperty(i)) { //hasOwnProperty() ( ) 。 , true, false
newObj[i] = oldObj[i]
}
}
return newObj
}
var newObject = shallowCopy(oldObject)
console.log(newObject) //newObject oldObject
console.log(newObject.wife == oldObject.wife) //true
console.log(newObject.friends == oldObject.friends) //true, true newObject , oldObject
깊은 복사: 깊은 복사는 새로운 창고를 개척하는 것이다. 두 대상은 두 개의 서로 다른 주소, 즉 더미 속의 서로 다른 공간을 가리키며 한 대상의 속성을 수정하면 다른 대상의 속성을 바꾸지 않는다.심층 복사는 하위 객체와 하위 객체 아래의 객체를 복제하며 새 객체와 이전 객체는 공통 영역이 아닙니다.딥 카피 구현 함수:var oldObject = {name:" ",
age:25,
sex:" ",
city:" ",
wife:{name:" ", sex:" ", age:24, city:" "},
friends:[" ", " ", " "]
}
function deepCopy(oldObj) {
var newObj = {}
for (var key in oldObj) {
if (typeof oldObj[key] === 'object') {
newObj[key] = deepCopy(oldObj[key]) //
} else {
newObj[key] = oldObj[key] //
}
}
return newObj
}
var newObject = deepCopy(oldObject)
console.log(newObject) //newObject oldObject
console.log(newObject.wife == oldObject.wife) //false
console.log(newObject.friends == oldObject.friends) //false, false newObject , oldObject
자바스크립트의 깊은 복사와 얕은 복사에 대한 대답을 참고하시겠습니까?무엇이 즉시 실행 함수입니까?무슨 작용이 있습니까?
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSON
JSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다.
그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다.
저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.
var a = 1
function fn1(){
function fn3(){
var a = 4
fn2()
}
var a = 2
return fn3
}
function fn2(){
console.log(a)
}
var fn = fn1()
fn() //
var a = 1
function fn1(){
function fn3(){
function fn2(){
console.log(a)
}
fn2()
var a = 4
}
var a = 2
return fn3
}
var fn = fn1()
fn() //
출력 결과는 다음과 같다. undefined 이 문제는 특히 주의해야 한다. 이 문제와 위의 차이점은 변수가 앞당겨져서 fn2()의 집행은 a변수가 성명한 후에 값을 부여하기 전(a는 이때 성명만 하고 값을 부여하지 않았기 때문에 undefined), 즉 함수 fn3의 실제 집행은 다음과 같다.
function fn3(){
function fn2(){
console.log(a)
}
var a
fn2()
a = 4
}
12. 다음 코드는 무엇을 출력합니까?무엇 때문에 var obj1 = {a:1, b:2};
var obj2 = {a:1, b:2};
console.log(obj1 == obj2);
console.log(obj1 = obj2);
console.log(obj1 == obj2);
출력:false
{a: 1, b: 2}
true
이유: 대상의 상등, 그들의 인용이 메모리의 같은 구역을 가리킬 때만 상등하다. 즉, 그들이 창고 메모리에 있는 인용 주소가 같은obj1과obj2는 각각 두 개의 다른 대상 인용이다. 그 안에 저장된 주소는 다르다. 즉, 그들이 가리키는 구역은 다르다. 실시간 구역의 내용은 같고 같지 않기 때문에obj1=obj2를 통해obj2에 저장된 주소를obj1에게 부여한 후에obj1과obj2는 같은 구역을 가리키기 때문에 마지막에 둘은 같다
13. 다음 코드는 무엇을 출력합니까?무엇 때문에 var a = 1
var c = { name: 'jirengu', age: 2 }
function f1(n){
++n
}
function f2(obj){
++obj.age
}
f1(a)
f2(c)
f1(c.age)
console.log(a)
console.log(c)
출력:1
{name: "jirengu", age: 3}
이유: a는 실삼으로 f1의 형삼 n에게 전달되었는데 a의 값을 n에게 부여한 다음에 +n, 그리고 n의 값을 2로 바꾸는 것과 같다. a의 값은 여전히 1c로 실삼으로 f2의 형삼 obj에 전달되었다. c는 하나의 대상이다. 그 안에 저장된 것은 그 안에 있는 내용이 있는 메모리 구역의 주소를 가리키고 f2에서 이 주소가 가리키는 메모리 구역 안의age를 전++로 한다.그래서 이 메모리 영역에서age의 실제 값을 바꾸었다. 즉age는 마지막에 3을 얻어 c.age를 실참으로 f1의 형삼 n에게 전달했고 여전히age를 하나의 값으로 n에게 부여했다. age 자체의 주를 바꾸지 않았다. 값의 전달은 그 자체를 바꿀 수 없고 인용된 전달이 있어야 한다.
14. 딥 카피 함수 쓰기
얕은 복사: 문자열 유형에 대해 얕은 복사는 값에 대한 복사이고 대상에 대해 얕은 복사는 대상 주소에 대한 복사이며 새로운 창고를 열지 않았다. 즉, 복사의 결과는 두 대상이 같은 주소를 가리키고 그 중의 한 대상의 속성을 수정하면 다른 대상의 속성도 바뀐다.얕은 복사본의 경우 하위 객체와 하위 객체 아래의 객체가 모두 공용됩니다.간단한 복제 구현 함수:var oldObject = {name:" ",
age:25,
sex:" ",
city:" ",
wife:{name:" ", sex:" ", age:24, city:" "},
friends:[" ", " ", " "]
}
function shallowCopy(oldObj) {
var newObj = {}
for (var i in oldObj) {
if (oldObj.hasOwnProperty(i)) { //hasOwnProperty() ( ) 。 , true, false
newObj[i] = oldObj[i]
}
}
return newObj
}
var newObject = shallowCopy(oldObject)
console.log(newObject) //newObject oldObject
console.log(newObject.wife == oldObject.wife) //true
console.log(newObject.friends == oldObject.friends) //true, true newObject , oldObject
깊은 복사: 깊은 복사는 새로운 창고를 개척하는 것이다. 두 대상은 두 개의 서로 다른 주소, 즉 더미 속의 서로 다른 공간을 가리키며 한 대상의 속성을 수정하면 다른 대상의 속성을 바꾸지 않는다.심층 복사는 하위 객체와 하위 객체 아래의 객체를 복제하며 새 객체와 이전 객체는 공통 영역이 아닙니다.딥 카피 구현 함수:var oldObject = {name:" ",
age:25,
sex:" ",
city:" ",
wife:{name:" ", sex:" ", age:24, city:" "},
friends:[" ", " ", " "]
}
function deepCopy(oldObj) {
var newObj = {}
for (var key in oldObj) {
if (typeof oldObj[key] === 'object') {
newObj[key] = deepCopy(oldObj[key]) //
} else {
newObj[key] = oldObj[key] //
}
}
return newObj
}
var newObject = deepCopy(oldObject)
console.log(newObject) //newObject oldObject
console.log(newObject.wife == oldObject.wife) //false
console.log(newObject.friends == oldObject.friends) //false, false newObject , oldObject
자바스크립트의 깊은 복사와 얕은 복사에 대한 대답을 참고하시겠습니까?무엇이 즉시 실행 함수입니까?무슨 작용이 있습니까?
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSON
JSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다.
그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다.
저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.
var obj1 = {a:1, b:2};
var obj2 = {a:1, b:2};
console.log(obj1 == obj2);
console.log(obj1 = obj2);
console.log(obj1 == obj2);
false
{a: 1, b: 2}
true
var a = 1
var c = { name: 'jirengu', age: 2 }
function f1(n){
++n
}
function f2(obj){
++obj.age
}
f1(a)
f2(c)
f1(c.age)
console.log(a)
console.log(c)
출력:
1
{name: "jirengu", age: 3}
이유: a는 실삼으로 f1의 형삼 n에게 전달되었는데 a의 값을 n에게 부여한 다음에 +n, 그리고 n의 값을 2로 바꾸는 것과 같다. a의 값은 여전히 1c로 실삼으로 f2의 형삼 obj에 전달되었다. c는 하나의 대상이다. 그 안에 저장된 것은 그 안에 있는 내용이 있는 메모리 구역의 주소를 가리키고 f2에서 이 주소가 가리키는 메모리 구역 안의age를 전++로 한다.그래서 이 메모리 영역에서age의 실제 값을 바꾸었다. 즉age는 마지막에 3을 얻어 c.age를 실참으로 f1의 형삼 n에게 전달했고 여전히age를 하나의 값으로 n에게 부여했다. age 자체의 주를 바꾸지 않았다. 값의 전달은 그 자체를 바꿀 수 없고 인용된 전달이 있어야 한다.
14. 딥 카피 함수 쓰기
얕은 복사: 문자열 유형에 대해 얕은 복사는 값에 대한 복사이고 대상에 대해 얕은 복사는 대상 주소에 대한 복사이며 새로운 창고를 열지 않았다. 즉, 복사의 결과는 두 대상이 같은 주소를 가리키고 그 중의 한 대상의 속성을 수정하면 다른 대상의 속성도 바뀐다.얕은 복사본의 경우 하위 객체와 하위 객체 아래의 객체가 모두 공용됩니다.간단한 복제 구현 함수:var oldObject = {name:" ",
age:25,
sex:" ",
city:" ",
wife:{name:" ", sex:" ", age:24, city:" "},
friends:[" ", " ", " "]
}
function shallowCopy(oldObj) {
var newObj = {}
for (var i in oldObj) {
if (oldObj.hasOwnProperty(i)) { //hasOwnProperty() ( ) 。 , true, false
newObj[i] = oldObj[i]
}
}
return newObj
}
var newObject = shallowCopy(oldObject)
console.log(newObject) //newObject oldObject
console.log(newObject.wife == oldObject.wife) //true
console.log(newObject.friends == oldObject.friends) //true, true newObject , oldObject
깊은 복사: 깊은 복사는 새로운 창고를 개척하는 것이다. 두 대상은 두 개의 서로 다른 주소, 즉 더미 속의 서로 다른 공간을 가리키며 한 대상의 속성을 수정하면 다른 대상의 속성을 바꾸지 않는다.심층 복사는 하위 객체와 하위 객체 아래의 객체를 복제하며 새 객체와 이전 객체는 공통 영역이 아닙니다.딥 카피 구현 함수:var oldObject = {name:" ",
age:25,
sex:" ",
city:" ",
wife:{name:" ", sex:" ", age:24, city:" "},
friends:[" ", " ", " "]
}
function deepCopy(oldObj) {
var newObj = {}
for (var key in oldObj) {
if (typeof oldObj[key] === 'object') {
newObj[key] = deepCopy(oldObj[key]) //
} else {
newObj[key] = oldObj[key] //
}
}
return newObj
}
var newObject = deepCopy(oldObject)
console.log(newObject) //newObject oldObject
console.log(newObject.wife == oldObject.wife) //false
console.log(newObject.friends == oldObject.friends) //false, false newObject , oldObject
자바스크립트의 깊은 복사와 얕은 복사에 대한 대답을 참고하시겠습니까?무엇이 즉시 실행 함수입니까?무슨 작용이 있습니까?
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSON
JSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다.
그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다.
저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.
var oldObject = {name:" ",
age:25,
sex:" ",
city:" ",
wife:{name:" ", sex:" ", age:24, city:" "},
friends:[" ", " ", " "]
}
function shallowCopy(oldObj) {
var newObj = {}
for (var i in oldObj) {
if (oldObj.hasOwnProperty(i)) { //hasOwnProperty() ( ) 。 , true, false
newObj[i] = oldObj[i]
}
}
return newObj
}
var newObject = shallowCopy(oldObject)
console.log(newObject) //newObject oldObject
console.log(newObject.wife == oldObject.wife) //true
console.log(newObject.friends == oldObject.friends) //true, true newObject , oldObject
var oldObject = {name:" ",
age:25,
sex:" ",
city:" ",
wife:{name:" ", sex:" ", age:24, city:" "},
friends:[" ", " ", " "]
}
function deepCopy(oldObj) {
var newObj = {}
for (var key in oldObj) {
if (typeof oldObj[key] === 'object') {
newObj[key] = deepCopy(oldObj[key]) //
} else {
newObj[key] = oldObj[key] //
}
}
return newObj
}
var newObject = deepCopy(oldObject)
console.log(newObject) //newObject oldObject
console.log(newObject.wife == oldObject.wife) //false
console.log(newObject.friends == oldObject.friends) //false, false newObject , oldObject
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.