js函数(上)

函数的作用

任意功能的代码进行“封装”,在需要的时候进行调用。(像一个盒子,盒子里面封装代码,通过盒子名称找到盒子执行里面的代码)——封装代码

  • 盒子封装代码
  • 调用盒子执行代码
  • 封装优点:封装代码,复用代码

函数的语法

// 定义函数

function 函数名(){

封装代码

}

函数名() // 函数调用语句

  • 示例:
//定义一个函数fun
function fun(){
    console.log('这是我的第一个函数')
}
//调用函数fun语句
fun()

1.(封装 )求两个数最大值54,67的函数

//定义名为getMax的函数
function getMax(){
     var m = 54
     var n = 67
     var max = m
     if(max < n){
         max = n
     }
    console.log('最大值为'+max);
}

// 调用getMax函数
getMax()

2.(封装)判断闰年的函数

 // 定义函数isLeapYear
function isLeapYear(){
       var year = 2024
            // 计算闰年
       var day = (year % 4 == 0 && year % 100 != 0)||(year % 400 ==0)
       if(day){
           console.log(year+"是闰年");
       }else{
           console.log(year+"不是闰年");
       }
}
isLeapYear()  //调用isLeapYear函数

函数的参数

  • 形参:定义函数时,在函数名括号中定义的变量称为形参

  • 实参:使用函数调用语句时,传入的参数称为实参

    function 函数名(m){

    函数体

    }

    函数体(100)

  • 函数参数的个数
    1.定义多个参数

function 函数名(m,n){
    函数体
}

函数体(100,200)

2.形参个数多于实参个数(少传的参数将输出undefined)
3.实参个数多于形参个数(多余的参数传值将被抛弃)

函数的返回值(return)

1.有返回结果
  • 语法为:return 表达式;

  • 作用:语句结束函数执行,返回调用函数,而且把表达式的值作为函数的结果

  • 参数默认值:当传入参数时,参数为传入的参数;当没有传参数时,将传入默认值

function fun(m){
    m = m || 10 //函数默认值
    console.log('m', m)
}

// 参数传入100时,m = 100
fun(100)
// 没有传参时,m为函数中的默认值(m = 10)
fun()
  • 示例:(封装 )求两个数最大值54,67的函数
//定义名为getMax的函数
function getMax(x, z) {
    // x = 54, z = 67
    var m = x //54
    var n = z //67
    var max = m
    if (n > max) {
        max = n
    }
    return max
}

var m1 = getMax(54, 67)

var m2 = getMax(34, 89)

console.log('m1 ',m1, ' m2 ',m2);
2.无返回结果
无函数结果,语法为:return;

return false:分会错误的处理结果,终止处理。

一般用于取消默认动作。比如你单击一个链接除了触发onclick事件(如果你指定的话)以外还要触发一个默认事件(执行页面跳转)。而想要取消这个默认动作,就可以使用return false语句

  • 首先在js中,我们常用return false来阻止提交表单者继续执行下面的代码,通俗的来说就是阻止执行默认的行为。

  • return false 只在当前函数有效,不会影响其他外部函数的执行。

return true:返回正确的处理结果。

函数的定义方式

1.声明式函数
语法:
function 函数名(){

}
2.函数表达式(赋值式)
语法:
var 函数名 = function (){

}

函数类型

1.无参无返回值
语法:
function 函数名(){

}

2.无参有返回值
语法:
function 函数名(){

return 100

}

3.有参无返回值
语法:
function 函数名(m){

}

4.有参有返回值
语法:
function 函数名(m){

return 100

}

预解析

浏览器javascript引擎,解析执行javascript代码
执行javascript代码之前,它扫描通读js代码,如果发现声明式函数和var声明的变量,将其提前。
1.声明式函数提前
2.var声明变量提前

解析声明式函数和var声明变量的过程:

            // 源代码
            fun()
            console.log('111 num :', num)
            var num = 100
            function fun() {
                console.log('fun >>>')
            }
            console.log('222 num ', num)


            // 浏览器解析之后,将变成  
            // function fun() {
            //  console.log('fun >>>')
            // }
            // var num
            // fun()
            // console.log('111 num :', num)
            // num = 100
            // console.log('222 num ', num)

总结:不管声明代码在哪,浏览器都将会预解析

练习

1.程序输出结果是多少? (预解析知识点)
分析:先找到预解析的代码,将其进行提前处理,在从上到下的顺序输出结果。

console.log(num)    //undefined
var num = 10
f()                 // undefined 20
console.log(f2)     // undefined

function f() {
    console.log(n)
    var n = 20
    console.log(n)
}
console.log(num)    // 10

var f2 = function () {
    console.log('我是f2')
}

2.程序代码片段运行结果是? (函数传参)

var data = 'abc'        

fun(data)       

console.log(data)   // 'abc'

function fun(data) {
    data += 'xyz'
}

3.百元买百鸡(试)

/*
   3. 百元买百鸡:用一百元钱买一百只鸡。已知公鸡5元/只,母鸡3元/只,小鸡1元/3只
    分析:假设: 公鸡 x只  母鸡y只 小鸡z只

    x + y + z = 100

    1 + 1 + 98
    1 + 2 + 97
    1 + 3 + 96

    5*x + 3*y + z/3 = 100

    5 + 3 + 98/3
    5 + 3*2 + 97/3 
*/
for (var x = 1; x < 100; x++) {
    for (var y = 1; y < 100; y++) {
        for (var z = 1; z < 100; z++) {
            if (x + y + z == 100 && 5 * x + 3 * y + z / 3 == 100) {
                console.log(' x :', x, ' y :', y, 'z :', z)
                }
            }
        }
    }
}

优化代码:双重for循环

for (var x = 1; x < 100; x++) {
    for (var y = 1; y < 100; y++) {
        z = 100 - x - y
        if (5 * x + 3 * y + z / 3 == 100) {
            console.log(' x :', x, ' y :', y, 'z :', z)
        }
    }
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,544评论 6 501
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,430评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 162,764评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,193评论 1 292
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,216评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,182评论 1 299
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,063评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,917评论 0 274
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,329评论 1 310
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,543评论 2 332
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,722评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,425评论 5 343
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,019评论 3 326
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,671评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,825评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,729评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,614评论 2 353