JavaScript_javascript 팁의 다양한 공통 함수 정의 방법
이 글에서는 JavaScript의 다양한 공통 함수 정의 방법을 자세히 설명하고 참고용으로 공유합니다. 구체적인 분석은 다음과 같습니다.
먼저 JavaScript에서 가장 일반적인 네 가지 함수 정의를 살펴보겠습니다.
Function 생성자를 이용하여 정의한 함수로, 코드는 다음과 같습니다.
var multiply = new Function('x', 'y', 'return x * y;');
함수 선언, 이 방법은 가장 일반적인 방법이기도 합니다.
function multiply(x, y) { return x * y; }
익명 함수로 선언된 후 매우 일반적인 방식으로 변수에 할당되는 함수 표현식:
var multiply = function(x, y) { return x * y; }
함수 표현식이지만 함수는 명명된 함수로 선언된 다음 변수에 할당됩니다.
var multiply = function multi(x, y) { return x * y; }
먼저 함수 이름과 함수가 할당된 함수 변수의 직접적인 관계를 비교해 보겠습니다. 정말 헷갈립니다... 좀 더 직관적으로 말하자면, 방금 예제 4의 관계에 대해 이야기해 보겠습니다. 함수 변수 Multiply와 함수 이름 multi 사이에 있습니다.
함수 이름은 수정할 수 없습니다. 반대로 함수 변수는 다시 할당할 수 있습니다. 함수 변수는 재할당될 수 있다는 것을 이해하기 쉽습니다. 네 번째 예제에서 방금 정의한 곱셈 변수는 보기에 좋지 않으므로 다음과 같이 재할당할 수 있습니다.
multiply = function(x, y) { return x + y; }
함수 이름은 함수 외부에서 사용할 수 없습니다. 매우 간단한 예는 다음과 같습니다.
var foo = function bar() { alert('hello'); } foo(); // 提示“hello”字符串 bar(); // 执行报错,bar未定义
예제 4를 계속 보면 함수 이름(multi)과 함수 변수(multiply)가 동일하지 않다는 것을 알 수 있습니다. 실제로는 전혀 관계가 없으므로 일관성을 유지할 필요가 없습니다. 그러고보니 위의 4가지 예는 3가지로 압축될 수 있을 것 같습니다. 예 2와 4는 본질적으로 동일해야 합니다. 뭐, 믿을 수 없나요? 히히 계속 진실을 말해야지~계속 읽어봐~~
예제 4와 비교하면 예 2에는 var라는 함수 변수만 부족하고, 예 4와 비교하면 예 3에는 함수 이름만 부족한 것을 현상의 관점에서 보면 예 2와 예 4의 본질은 다음과 같습니다. 마찬가지로 철갑 증거는 다음과 같습니다.
function foo() {} alert(foo); // 提示包含“foo”的函数名 var bar = foo; alert(bar); // 提示依然只包含“foo”的函数名,和bar半毛钱关系都没有
그러나 여기서 언급할 수 있는 작은 차이점이 있습니다. 함수 선언 모드에서 정의된 함수와 생성자 선언 또는 함수 표현식 선언의 차이점은 함수 선언 모드에서 함수를 정의하기 전에 호출할 수 있다는 것입니다. 더 이상 이야기하지 않겠습니다. 코드를 살펴보겠습니다.
foo(); // 提示Foo function foo() { alert('Foo'); } bar(); // 哥们,和上面确实不一样,就不要逞能,这不报错了?提示bar未定义 var bar = function() { alert('Bar'); }
function foo() { var hi = 'hello'; //return function() { // alert(hi); //}; return Function('return hi;'); } foo()(); // 执行效果大家自己跑一下看看
可以想见,用构造函数声明返回的这个函数执行必然报错,因为其作用域(即全局作用域)中没有hi这个变量。
还有一点,就是往往大家要说构造函数方式声明的函数效率要低,这是为什么呢?今天从文档是得知是因为另外3种方式申明的函数只会被解析一次,其实他们存在于闭包中,但是那也只与作用域链有关,函数体是只会被解析一次的。但是构造函数方式呢,每次执行函数的时候,其函数体都会被解析一次,我们可以想想这样声明的函数是一个对象,其中存放了参数以及函数体,每次执行的时候都要先解析一次,参数和函数体,才会执行,这样必然效率低下。具体实验不知道如何做?
最后说一个大家都不怎么注意的地方,什么时候看似函数声明方式的方式却不是函数生命方式(还是这么绕~简单点儿说,就是例2的方式什么时候在不经意间就成其他方式了):
当成为表达式的一部分,就如同例3和例4。
不再是脚本本身或者函数的“源元素”(source element)。什么是源元素呢?即在脚本中的非嵌套语句或者函数体(A "source element" is a non-nested statement in the script or a function body),例如:
var x = 0; // source element if (x == 0) { // source element x = 10; // not a source element, 因为嵌套在了if语句里 function boo() {} // not a source element, 因为嵌套在了if语句里 } function foo() { // source element var y = 20; // source element function bar() {} // source element while (y == 10) { // source element function blah() {} // not a source element, 因为嵌套在了while语句里 y++; // not a source element, 因为嵌套在了while语句里 } }
源元素的概念大概有了理解,继续刚刚说的函数声明,请看:
// 函数声明 function foo() {} // 函数表达式 (function bar() {}) // 函数表达式 x = function hello() {} if (x) { // 函数表达式 function world() {} } // function statement function a() { // function statement function b() {} if (0) { // 函数表达式 function c() {} } }
最后这里说一下我自己的理解,之所以要区分函数声明与非函数声明,因为在我看了,函数声明方式的函数定义,在JS解析引擎执行的时候会将其提前声明,也就是像我们刚刚上面说的那样,可以在函数定义之前使用,实际上是解析引擎在我们使用前已经将其解析了,但是非函数声明式,就像表达式函数声明,JS解析引擎只会把var声明的变量提前定义,此时变量值为undefined,而真正对这个变量的赋值是在代码实际所在位置,因此上述提到报错都是undefined,实际变量已经定义了,只是还没有赋值,JS解析引擎不知道它为函数。
相信本文所述对大家javascript WEB程序设计的有一定的借鉴价值。

핫 AI 도구

Undresser.AI Undress
사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover
사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool
무료로 이미지를 벗다

Clothoff.io
AI 옷 제거제

Video Face Swap
완전히 무료인 AI 얼굴 교환 도구를 사용하여 모든 비디오의 얼굴을 쉽게 바꾸세요!

인기 기사

뜨거운 도구

메모장++7.3.1
사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전
중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기
강력한 PHP 통합 개발 환경

드림위버 CS6
시각적 웹 개발 도구

SublimeText3 Mac 버전
신 수준의 코드 편집 소프트웨어(SublimeText3)

불행하게도 사람들은 어떤 이유로든 실수로 특정 연락처를 삭제하는 경우가 많습니다. WeChat은 널리 사용되는 소셜 소프트웨어입니다. 사용자가 이 문제를 해결할 수 있도록 이 문서에서는 삭제된 연락처를 간단한 방법으로 검색하는 방법을 소개합니다. 1. WeChat 연락처 삭제 메커니즘을 이해하면 삭제된 연락처를 검색할 수 있습니다. WeChat의 연락처 삭제 메커니즘은 연락처를 주소록에서 제거하지만 완전히 삭제하지는 않습니다. 2. WeChat에 내장된 "연락처 복구" 기능을 사용하세요. WeChat은 "연락처 복구"를 제공하여 시간과 에너지를 절약합니다. 사용자는 이 기능을 통해 이전에 삭제한 연락처를 빠르게 검색할 수 있습니다. 3. WeChat 설정 페이지에 들어가서 오른쪽 하단을 클릭하고 WeChat 애플리케이션 "나"를 열고 오른쪽 상단에 있는 설정 아이콘을 클릭하여 설정 페이지로 들어갑니다.

모바일 게임은 기술의 발전과 함께 사람들의 삶에 없어서는 안될 부분이 되었습니다. 귀여운 드래곤 알 이미지와 흥미로운 부화 과정으로 많은 플레이어들의 관심을 끌었으며, 특히 주목을 받은 게임 중 하나가 드래곤 알 모바일 버전이다. 플레이어가 게임에서 자신만의 드래곤을 더 잘 육성하고 성장시킬 수 있도록 이 글에서는 모바일 버전에서 드래곤 알을 부화시키는 방법을 소개합니다. 1. 적절한 유형의 드래곤 알을 선택하십시오. 플레이어는 게임에서 제공되는 다양한 유형의 드래곤 알 속성과 능력을 기반으로 자신이 좋아하고 적합한 드래곤 알 유형을 신중하게 선택해야 합니다. 2. 부화기의 레벨을 업그레이드하세요. 플레이어는 작업을 완료하고 소품을 수집하여 부화기의 레벨을 향상시켜야 합니다. 부화기의 레벨에 따라 부화 속도와 부화 성공률이 결정됩니다. 3. 플레이어가 게임에 참여하는데 필요한 자원을 수집하세요.

휴대폰이 사람들의 일상 생활에서 중요한 도구가 되면서 글꼴 크기 설정은 중요한 개인화 요구 사항이 되었습니다. 다양한 사용자의 요구를 충족하기 위해 이 기사에서는 간단한 조작을 통해 휴대폰 사용 경험을 개선하고 휴대폰의 글꼴 크기를 조정하는 방법을 소개합니다. 휴대폰의 글꼴 크기를 조정해야 하는 이유 - 글꼴 크기를 조정하면 텍스트가 더 명확하고 읽기 쉬워집니다. - 다양한 연령대의 사용자의 읽기 요구에 적합 - 시력이 좋지 않은 사용자가 글꼴 크기를 사용하는 것이 편리합니다. 휴대폰 시스템의 설정 기능 - 시스템 설정 인터페이스에 들어가는 방법 - 찾기에서 설정 인터페이스의 "디스플레이" 옵션을 입력합니다. - "글꼴 크기" 옵션을 찾아 타사를 통해 글꼴 크기를 조정합니다. 애플리케이션 - 글꼴 크기 조정을 지원하는 애플리케이션 다운로드 및 설치 - 애플리케이션을 열고 관련 설정 인터페이스로 진입 - 개인에 따라

Go 언어는 클로저와 리플렉션이라는 두 가지 동적 함수 생성 기술을 제공합니다. 클로저는 클로저 범위 내의 변수에 대한 액세스를 허용하며 리플렉션은 FuncOf 함수를 사용하여 새 함수를 생성할 수 있습니다. 이러한 기술은 HTTP 라우터를 사용자 정의하고 고도로 사용자 정의 가능한 시스템을 구현하며 플러그 가능한 구성 요소를 구축하는 데 유용합니다.

C++ 함수 이름 지정에서는 가독성을 높이고 오류를 줄이며 리팩토링을 용이하게 하기 위해 매개변수 순서를 고려하는 것이 중요합니다. 일반적인 매개변수 순서 규칙에는 작업-객체, 개체-작업, 의미론적 의미 및 표준 라이브러리 준수가 포함됩니다. 최적의 순서는 함수의 목적, 매개변수 유형, 잠재적인 혼동 및 언어 규칙에 따라 달라집니다.

1. SUM 함수는 열이나 셀 그룹의 숫자를 합하는 데 사용됩니다(예: =SUM(A1:J10)). 2. AVERAGE 함수는 열이나 셀 그룹에 있는 숫자의 평균을 계산하는 데 사용됩니다(예: =AVERAGE(A1:A10)). 3. COUNT 함수, 열이나 셀 그룹의 숫자나 텍스트 수를 세는 데 사용됩니다. 예: =COUNT(A1:A10) 4. IF 함수, 지정된 조건을 기반으로 논리적 판단을 내리고 결과를 반환하는 데 사용됩니다. 해당 결과.

C++ 함수에서 기본 매개변수의 장점에는 호출 단순화, 가독성 향상, 오류 방지 등이 있습니다. 단점은 제한된 유연성과 명명 제한입니다. 가변 매개변수의 장점에는 무제한의 유연성과 동적 바인딩이 포함됩니다. 단점은 더 큰 복잡성, 암시적 유형 변환 및 디버깅의 어려움을 포함합니다.

효율적이고 유지 관리 가능한 Java 함수를 작성하는 핵심은 단순함을 유지하는 것입니다. 의미 있는 이름을 사용하세요. 특별한 상황을 처리합니다. 적절한 가시성을 사용하십시오.
