javascript函數
函數就是一個功能子產品,函數式程式設計是一種面向過程的程式設計思想,如果遇到一個大的複雜問題,可以分解成幾個部分,每個部分用專門的函數分解實作。
函數文法:
function functionName(parameters) {
執行的代碼
}
functionName(parameters) // 函數調用
函數聲明後不會立即執行,會在我們需要的時候調用到。
函數提升:
- 提升(Hoisting)是 JavaScript 預設将目前作用域提升到前面去的行為。
- 提升(Hoisting)應用在變量的聲明與函數的聲明。
是以,函數可以在聲明之前調用:
console.log(add(3, 4));
function add(a, b){
return a + b;
}
函數表達式:JavaScript 函數可以通過一個表達式定義。
const add = function(a, b){
return a + b;
}
console.log(add(3, 4));
箭頭函數:表現形式更加簡潔。
const add = (a, b) => {
return a + b;
}
console.log(add(3, 4));
函數作用域
局部變量:隻能在函數内部通路。
變量在函數内聲明,變量為局部變量,具有局部作用域。
const output = () => {
let a = 10;
}
console.log(a);
變量在函數外定義,即為全局變量。
全局變量有 全局作用域: 網頁中所有腳本和函數均可使用。
let url = "https://noi.hioier.com/";
const output = () => {
console.log(url);
}
output();
哥德巴赫猜想
首先,将一個大問題劃分成兩個子問題:
- 判斷一個數是否是質數;
- 循環周遊2~n,如果i是質數且n-i也是質數,則輸出結果,并跳出循環。
因為枚舉過程是從小到大,第一個找到的可行解一定是字典序最小的。
let buf = "";
const is_prime = (n) => {
for(let i = 2; i < n; i++){
if(n % i == 0)
return false;
}
return true;
}
process.stdin.on("readable", function(){
let chunk = process.stdin.read();
if(chunk) buf += chunk.toString();
});
process.stdin.on("end", function(){
let n = parseInt(buf);
for(let i = 2; i <= n; i++){
if(is_prime(i) && is_prime(n - i)){
console.log(`${n} = ${i} + ${n-i}`);
break;
}
}
// console.log(is_prime(n))
});
面向對象程式設計
面向對象程式設計相較于面向過程程式設計更适合大型程式設計。
類是用于建立對象的模闆。我們使用 class 關鍵字來建立一個類,類體在一對大括号 {} 中,我們可以在大括号 {} 中定義類成員的位置,如方法或構造函數。
每個類中包含了一個特殊的方法 constructor(),它是類的構造函數,在建立對象時自動執行。
class People{
constructor(name, age){
this.name = name;
this.age = age;
}
output(){
console.log(`My name is ${this.name}, I am ${this.age} years old.`);
}
}
let xiaoming = new People("小明", 10);
xiaoming.output();
繼承:
在子類的構造函數中,隻有調用super之後,才可以使用this關鍵字。
成員重名時,子類的成員會覆寫父類的成員。
class Student extends People{
constructor(name, age, score){
super(name, age);
this.score = score;
}
output(){
console.log(`My name is ${this.name}, I am ${this.age} years old.My total score is ${this.score}.`);
}
}
let xiaohong = new Student("小紅", 8, 300);
xiaohong.output();
靜态方法和靜态變量
靜态方法:在成員函數前添加static關鍵字即可。靜态方法不會被類的執行個體繼承,隻能通過類來調用。
class People{
constructor(name, age){
this.name = name;
this.age = age;
}
output(){
console.log(`My name is ${this.name}, I am ${this.age} years old.`);
}
static current_class_name(){
console.log("People");
}
}
let xiaoming = new People("小明", 10);
// xiaoming.output();
// xiaoming.current_class_name();
People.current_class_name();
靜态變量:隻能通過classname.variablename定義和通路。
class People{
constructor(name, age){
this.name = name;
this.age = age;
People.color = 'yellow';
}
output(){
console.log(`My name is ${this.name}, I am ${this.age} years old.`);
}
static current_class_name(){
console.log("People");
}
}
console.log(People.color);
相關推薦
- Javascript簡介和基礎資料類型
- Javascript對象和頁籤實作
- 一文詳解javascript輪播圖
- 一文詳解Javascript定時器
- Javascript點選按鈕控制圖檔切換
- 一文詳解Javascript滑鼠事件,拖拽原理
- 一文詳解Javascript正規表達式,檢測使用者名密碼合法性
- Javascript擷取className屬性和slice切片
視訊講解
視訊加載中...