JS 기초 지식이 얼마나 아는지 (2) - 함수

7137 단어
일반적으로 하나의 함수는 외부 코드에 의해 호출되거나 함수 자체가 귀속적으로 호출될 수 있는 하위 프로그램이다.프로그램 자체와 마찬가지로 하나의 함수의 함수체는 일련의 문장으로 구성되어 있다.
1. 함수 성명과 함수 표현식은 어떤 차이가 있습니까?
syntax: 함수 성명:
 function ( : ){ }
함수 표현식:
functuion ( )( : ){ }
함수 명칭을 성명하면function 함수 명칭 () {}이 부치 표현식의 일부분이면 함수 표현식이다.function 함수 이름 () {} 이 함수 안에 포함되거나 프로그램의 맨 위에 있으면 함수 성명입니다.차이점은 a. 함수 성명은 모든 표현식이 해석되고 값을 구하기 전에 해석되고 값을 구한다는 것이다. 코드의 마지막 줄에 성명되더라도 같은 작용역 내의 첫 번째 표현식 이전에 해석되거나 값을 구한다는 것이다.예:

alert(fn());
function fn() {return 'Hello world!';}
b. 함수 성명은 조건 문장에서 사용할 수 있지만 표준화되지 않았다. 즉, 서로 다른 환경이 서로 다른 실행 결과를 얻을 수 있기 때문에 이런 상황에서 함수 표현식을 사용하는 것이 가장 좋다. c. 함수 성명의syntax:
function  (){}
함수 표현식의syntax:
var  =function  (){};
함수 성명 끝에 번호가 없지만 함수 표현식은 번호로 끝납니다.
2. 변수의 성명 전치는 무엇입니까?무엇이 함수의 성명 전치입니까?변수의 선언 전치: 자바스크립트 엔진의 작업 방식은 코드를 해석하고 선언된 모든 변수를 가져온 다음 한 줄씩 실행하는 것입니다.이로 인해 발생하는 결과는 모든 변수의 성명 문장이 코드의 머리부분으로 올라가고 변수 향상이라고도 부른다.함수 성명 전치: 함수 성명 과정은 전체 프로그램이 실행되기 전에 미리 처리되기 때문에 같은 작용역에서만 접근할 수 있고 정의하기 전에 호출해도 됩니다.
3.arguments는 무엇입니까?arguments는 클래스 그룹의 대상이다.function에 전달되는 매개 변수 목록을 나타냅니다.함수 내부의 로컬 변수입니다.arguments는 더 이상 함수의 속성이 아닙니다.함수 내부에서arguments 대상을 사용하여 함수의 모든 매개 변수를 얻을 수 있습니다.이 대상은 함수에 전달되는 매개 변수의 이력서 항목으로 항목의 색인 번호는 0부터 시작합니다.(MDN)
4. 함수의 재부팅은 어떻게 이루어집니까?JavaScript에는 재부팅 함수라는 개념이 없지만 arguments를 통해 함수 재부팅을 시뮬레이션할 수 있습니다.구현 코드 예:

function sum(){
var sum=0;
for(var i=0;i < arguments.length;i++){
sum+=arguments[i];
}
return sum;
}
sum(1,2);
5. 함수 표현식을 즉시 실행하는 것은 무엇입니까?무슨 작용이 있습니까?
함수 표현식은 함수 정의가 끝난 후 직접 호출됩니다.syntax:
a.(function(){/code/}());
b.(function(){/code/})();
c.!function(){/code/}();

작용: a.js는 블록급 작용역이 없어서 작용역을 격리하여 오염을 피하거나 작용역 체인을 차단하여 폐쇄로 인해 인용 상수가 방출되지 않도록 한다.b. 즉시 실행 특성을 이용하여 필요한 업무 함수나 대상을 되돌려 주고 매번 조건 판단을 통해 처리하지 않도록 한다.
6. 함수의 작용역 체인은 무엇입니까?javascript에서 변수의 작용역은 전역 작용역과 국부 작용역 두 가지가 있습니다.a. 전역 작용역: 코드 어느 곳에서든 접근할 수 있는 대상은 전역 작용역을 가지고 있다. b. 국부 작용역: 일반적으로 고정된 코드 세션에서만 접근할 수 있다.c. 함수 작용 체인: 자바스크립트에서 함수도 대상이다. 실제로 자바스크립트에서는 모든 것이 대상이다.함수 대상은 다른 대상과 마찬가지로 코드를 통해 접근할 수 있는 속성과 자바스크립트 엔진에서만 접근할 수 있는 일련의 내부 속성을 가지고 있다.그 중 하나의 내부 속성은 [[[Scope]]로 ECMA-262 표준 제3판에 의해 정의되었다. 이 내부 속성은 함수가 생성된 작용역에서 대상의 집합을 포함하고 이 집합은 함수의 작용역 체인이라고 불리며 어떤 데이터가 함수에 접근할 수 있는지를 결정한다.
코드 문제: 1.다음 코드는 무엇을 출력합니까?

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('hunger', 28, ' ');
getInfo('hunger', 28);
getInfo(' ');

출력 결과:

getInfo('hunger', 28, ' ');
name:hunger
age:28
sex:
["hunger",28," "]
name valley

getInfo('hunger', 28);
name:hunger
age:28
sex:undefined
["hunger",28]
name valley

getInfo(' ');
name:
age:unfined
sex:unfined
[" "]
name valley
2. 함수를 써서 매개 변수의 제곱과 합을 되돌려줍니까?

function sumOfSquares(){
var sum=0;
for(var i=0;i < arguments.length;i++)
{
sum+=arguments[i]*arguments[i];
}
console.log(sum);
}
sumOfSquares(2,3,4); // 29
sumOfSquares(1,3); // 10

3. 아래 코드의 출력은?왜?

console.log(a); // undefined,
var a = 1;
console.log(b);// ,b is not defined

4. 아래 코드의 출력은?왜?

sayName('world'); // sayName
sayAge(10); // sayAge
function sayName(name){
console.log('hello ', name); // :hello world
}
var sayAge = function(age){ //
console.log(age); // ,sayAge is not a function.
};

5. 다음 코드 출력?왜?

function fn(){}
var fn = 3;
console.log(fn);

var fn;
function fn(){}
fn=3;
console.log(fn);
출력 결과: 3, var fn 변수 증가, function fn () {} 함수 성명 전치, 세 번째 줄 코드는 fn에 값을 부여하여 변수로 출력할 수 있습니다.
6. 다음 코드 출력?왜

function fn(fn2){
console.log(fn2);
var fn2 = 3;
console.log(fn2);
console.log(fn);
function fn2(){
console.log('fnnn2');
}
}
fn(10);


a.fn(10) function fn(fn2){} 10 fn2;
b. ,console.log(fn2)
function fn2(){
console.log('fnnn2');
}
c.var fn2=3 fn2 ,console.log(fn2) 3;
d.console.log(fn) :
function fn(fn2){
console.log(fn2);
var fn2=3;
console.log(fn2);
console.log(fn);
function fn2(){
console.log('fnnn2');
}
}
7.다음 코드의 출력은?왜?

var fn = 1;
function fn(fn){
console.log(fn);
}
console.log(fn(fn));
출력 결과:


var fn;
function fn(fn){
console.log(fn);
}
fn=1;
console.log(fn(fn));
:fn is not a function
: , function fn(fn){} , , , 。
8.다음 코드의 출력은?왜?

//
console.log(j);
console.log(i);
for(var i=0; i<10; i++){
var j = 100;
}
console.log(i);
console.log(j);
출력 결과:

console.log(i);//undefined, , , undefined
console.log(j);//undefined, , , undefined
for(var i=0;i<10;i++){
var j=100;
}// i j
console.log(i);//10
console.log(j);//100

undefined
undefined
10
100
9. 다음 코드의 출력은?왜?

fn();
var i = 10;
var fn = 20;
console.log(i);
function fn(){
console.log(i);
var i = 99;
fn2();
console.log(i);
function fn2(){
i = 100;
}
}
출력 결과:

a. fn(){};
b. fn(){};
function fn(){
var i;
console.log(i);// , , undefined
i = 99;
fn2(); // fn2(),
console.log(i);// 100
function fn2(){
i = 100;
}
}
c.var i=10; i 10, 100,console.log(i) 10

undefined
100
10
10.다음 코드의 출력은?왜?

var say = 0;
(function say(n){
console.log(n);
if(n<3) return;
say(n-1);
}( 10 ));
console.log(say);
출력 결과:

(function say(n){
console.log(n);
if(n<3) return;
say(n-1);
}( 10 )); ;

10
9
8
7
6
5
4
3
2
console.log(say) say:0
참고문: 1.톰 아저씨 블로그 2.Back to Basics: JavaScript Hoisting 3.왜 js 즉시 실행 함수가 있어야 합니까? 존재하는 의미는 무엇입니까?4. JavaScript 역할 도메인 체인
판권은 본인 소유입니다. 전재가 있으면 출처를 밝히십시오

좋은 웹페이지 즐겨찾기