JavaScript-day2

函数:

复制代码
<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>js函数</title>
    <script>

        //函数式js中的最小功能单位
        //创建函数
        function add(num1, num2) {
            return num1 + num2;
        }
        console.log(add(1, 2));
        //意外来了
        console.log(add(1, 2, 3));//不报错,而且调用函数啦。。执行的是前两个参数。
        //实参可以和形参参数不匹配,说明JavaScript的函数参数列表不可以作为鉴别不同方法的特征。。。只能函数名区分
        console.log(add());//结果为NAN..如果实参小于形参,那就是未传递的形参就是undefined。。任何数字+undefined都是NAN  



        /* 内置对象: */
        //运行js代码的时候,由运行环境已经创建好的一些对象。。。我们可以直接使用
        //获取函数的实参个数
        function add2(num3, num4) {
            console.info(arguments);//arguments类似于java的可变形参列表。在js中可以当成一个数组来使用。。。(伪数组)

            //比较arguments是不是一个数组
            console.info([1, 3, 5] instanceof Array);//instanceof  对复杂数据类型做所属判断用的,和java一致、
            console.info(arguments instanceof Array);//false。。他不是一个数组。使用方式类似于数组
            console.log("===========arguments,不是数组,却是可以和数组一样的遍历方式==============")
            //arguments不具有数组的 push , pop 等方法
            var element = 0;
            for (let index = 0; index < arguments.length; index++) {
                element += arguments[index];
            }
            console.log(element);
            return num3 + num4;
        }
        add2(123, 3243, 345643645, 657567, 75345353, 234);


        //匿名函数
        var temp = function (x1, x2) {
            return x2 - x1;
        }
        //可以这样调用
        console.log(typeof temp(55, 11));//结果是number
        console.log(typeof temp);//function
        console.log(temp(55, 11));//-44

        //匿名函数调用方式二:自执行
        var temx = (function (x1, x2) {
            return x2 - x1;
        })(1, 5);
        //函数体().....
        console.log(temx);

        //函数作为参数传递进去:函数作为参数和返回值
        function cal(func1, numb1, numb2) {
            return func1(numb1, numb2);
        }
        function funcadd(number1, number2) {
            return number1 + number2;
        }
        var result = cal(funcadd, 1, 21);
        //除零是无穷大:
        (function (numx, numy) {
            console.log(numx / numy);
        })(1, 0);//Infinity

        //函数嵌套
        function distance(x1, y1, x2, y2) {
            function square(x) {
                return x * x;
            }

            return Math.sqrt(square(x1 - x2) + square(y1 - y2));
        }

        var result1 = distance(0, 0, 3, 4);
        //外层函数不能调用:函数内层函数。。。
       // console.log(square(1));报错。。。。。
        console.log(result1); // 5 

        function swtic(op, numxx, numyy) {
            switch (op) {
                case '+': return numxx + numyy;
                case '-': return numxx - numyy;
                case '*': return numxx * numyy;
                case '/': return numxx / numyy;
            }
        }

    </script>
</head>

<body>
    <!-- js函数 -->
</body>

</html>
复制代码

对象:

复制代码
<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>作用域</title>
    <script>
        /* 全局作用域||局部作用域 */
        var age = 10;//这就是全局作用域
        //局部作用域
        function abc() {
            var age1 = 11;//局部作用域
        }
        // console.log(age1);//会报错的。。未声明错误。。。。。
        //。注意局部作用域:是在函数内部。。其他的代码块中默认是全局作用域。
        if (true) {
            var able = "Hello World";
        } else {
            var able = "网吧我来了";
        }
        console.log(able);//没问题不报错。。。这不是方法内部(function)的,所以就是全局的作用域。外部可以访问得到。
        var sum = 0;
        //js没有块及作用域
        for (var index = 0; index < 5; index++) {
            sum += index;
        }
        console.log(sum + ":" + index);//for块里面的变量index,在外部可以访问得到,说明js没有块级作用域。。

        //全局变量都是挂载在Window对象上面的(window是js里面的顶级对象。。。)
        var a1 = 1;
        window.a2 = 20;
        console.log(window.a1)//这可以访问
        console.log(a2)//这样可以访问。。。
        //说明,默认全局是挂载到window对象上面的,还有就是window对象属性(方法)访问不需要对象.属性名。

        name = "郭童";//这句话是赋值,不是声明,因为window对象上面有这个变量,原window对象上的name属性是“”;
        console.log(name);//一样的:郭童
        console.log(window.name);//是一样的:郭童

        testx = "gt0";//这句话是声明一个变量,并且给这个变量赋值,还有将这个变量挂载到window对象、
        //原因是window对象本身没有带这个textx属性。
        console.log(window)

        //使用var关键字声明的变量才是真正的全局变量,没有使用var或者使用window.属性的方式声明的变量我们一般认为window对象的属性。
        function fun() {
            var next = 101;
            netx1 = 101;
            console.log(next);
        }
        fun();//调用方法
        // console.log(next);//这里时机上打印的是window对象的next属性,所以这里打印不到var定义的局部变量,所以报错。
        //当方法内部的,没有var声明。。。那就是window对象的属性,这时候不管你在函数内还是函数外都可以访问得到。
        console.info(netx1);//成功:101

        //变量搜索查找:就近原则。。。。从内向外,层层递进,找到为止。。。。

        var xxx1 = 20;
        function abcd() {
            var xxx1 = 10;
            function cndf() {
                xxx1 = 5;
                console.log(xxx1);
            }
            cndf();//5
        }
        abcd();//这里打印的是5.。但是变量原值是10,进入子方法重新赋值为5.。。

        function f1() {
            var num = 123;
            function f2() {
                console.log(num);
            }
            f2();
        }
        var num = 456;
        f1();//打印的是123



        //js预编译
        console.log(roless)
        var roless =10;//会预编译,先把变量声明提前。。但是不会赋值。。所以上一步是undefined。。


        //这里会报错,变量未定义声明。。。。
        console.log(roless)
        roless =10;

        //function方法,会自动提升到当前作用域开头
        //匿名方法,先调用,后定义,就会报错 not is function。。
        //类似
        funxxx()
        function funxxx(){
            console.log("hello   world")
        }
        //报错。。。。。
        funyyyy()
        var funyyyy=function(){
            console.log("hello   world") 
        }

        console.log(window)
        console.log(name)//这里打印::李四
        name= "李四";//window本身属性,,:name。在代码执行之前就会执行初始化赋值(预编译)
        //非window挂载的对象,n那么这时候不会去挂载到window对象。。那就不会提前声明与赋值。。会报错-->

    </script>
</head>

<body>
    <!-- 作用域 -->
</body>

</html>
复制代码
复制代码
<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>JavaScript对象</title>
    <script>
        //初始化创建对象:字面量创建方式一:
        var Person = {
            name: "GT",
            age: 16,
            salary: 1990,
            say: function () {
                console.log("Hello World");
                console.log(this.age);//方法内部的this,指针指向当前作用域的对象本身。。
            }
        }
        //全局作用域的this指向的是window对象。。
        //使用
        console.log(Person.age);
        Person.say();

        //对象:{key  :  value}
        //所有的·key都是字符串类型。。。。。。。。

        var MingRen = {
            name: "鸣人",
            sex: "男",
            age: 19,
            skile: function () {
                console.log("影分身术") ;
            }
        }
        var obj =new Object();
        obj.name="鸣人";
        obj.age=19;
        obj.sex="男";
        obj.skile=function(){
            console.info("影分身术");
        }
        //第三种方法:构造器创建对象:
        function thisObij(name,age){
            this.name=name;
            this.age=age;
            this.say=function(){
                console.log(111)
            }
        }
        var tem = new thisObij("tom",14);

        //遍历对象
        for(var key in tem){
            //key是字符串
            console.log(tem[key]);
        }

    </script>
</head>

<body>

</body>

</html>
复制代码

内置对象:

 

 

function getRandom(min, max) {
  return Math.floor(Math.random() * (max - min + 1)) + min; 
}

 

 

 

posted on   白嫖老郭  阅读(69)  评论(0编辑  收藏  举报

编辑推荐:
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南

导航

< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5
点击右上角即可分享
微信分享提示