JavaScript作用域、对象、Math、Date(笔记)

JavaScript作用域

就是代码名字(变量)在某个范围内起作用和效果,目的是为了提高程序的可靠性,更重要的是减少命名冲突

作用域又分为全局作用域和局部作用域
全局变量只有在浏览器关闭的时候才会销毁,比较占内存
局部变量在执行完程序后就会销毁,比较节约内存

    <script>
        // 这里是全局作用域
        // 全局作用域下的变量在全局下都可以使用
        var num = 10;

        function fn() {
            // 这里是局部作用域(函数作用域)
            //函数的形参也可以看做是局部变量
            // 如果在函数内部,没有声明直接赋值的变量也属于全局变量
            var num1 = 1;
        }
    </script>
<script>
    var num = 10;
    // 内部函数访问外部函数的变量,采取的是链式查找的方式来决定取哪个值
    function fn() { //外部函数
        var num = 20;

        function fun() { //内部函数
            console.log(num);

        }
        fun();
    }
    fn();
</script>

JS引擎运行js分为两步:预解析 代码执行
预解析会把JS里的所有var还有function提到当前作用域的最前面
代码执行 按招代码书写顺序从上往下执行
预解析分为变量预解析(变量提升)和函数预解析(函数提升)
变量提升就是把所有的变量声明提升到当前作用域的最前面,不提升赋值操作
函数提升就是把所有的函数声明提升到当前作用域的最前面,不调用函数

<script>
    var num = 10;
    fun();
    function fun() {
        console.log(num);
        var num = 20;
    }
    // 相当于执行了下面的操作
    // var num;
    // function fun() {
    //     var num;
    //     console.log(num);
    //     num = 20;
    // }
    // num = 10;
    // fun();
</script>
<script>
    function f1() {
        var a;
        a = b = c = 9;
        // 相当于var a=9; b=9; c=9; b和c想当于全局变量
        console.log(a);
        console.log(b);
        console.log(c);
    }
    f1();
    console.log(c);
    console.log(b);
    // 因为不是全局变量,所以会报错
    console.log(a);
</script>

对象

对象是一个具体的事物,看得见摸得着
对象是由属性和方法组成的

创建对象的三种方式
1、利用字面量创建对象

<script>
    // 创建对象
    // 里面的属性或方法用键值对的方式存储
    // 多个属性或方法中间由逗号隔开
    // 方法冒号后跟的是一个匿名函数
    var obj = {
            uname: 'yyyy',
            age: 21,
            sex: 'nan',
            say: function() {
                console.log('shuohuale');
            }
        }
        // 使用对象两种方式
        // 对象名.属性名
    console.log(obj.uname);
    // 对象名[属性名]
    console.log(obj['age']);

    // 调用对象的函数
    // 需要加小括号
    obj.say();
</script>

2、利用new Object来创建对象

<script>
    var obj = new Object();
    obj.uname = 'yyyy';
    obj.age = 18;
    obj.sex = 'nan';
    obj.say = function() {
        console.log('shuohua');
    }
</script>

3、构造函数创建对象

<script>
    // 因为一次创建一个对象,里面的很多方法和属性是相同的 
    // 所以我们可以可以把它封装成一个函数(构造函数)
    // function 构造函数名() {
    //     this.属性 = 值;
    //     this.方法 = function() {

    //     }
    // }
    function Star(uname, age, sex) {
        this.uname = uname;
        this.age = age;
        this.sex = sex;
    }
    // 构造函数名字首字母要大写
    // 不需要return就能返回结果
    // 调用构造函数必须使new
    var xinde = new Star('yyyy', 21, 'nan');
    console.log(typeof xinde);
    console.log(xinde.uname);
    console.log(xinde.age);
    console.log(xinde.sex);
</script>

new关键字执行过程

1、new构造函数在内存创建了一个空的对象
2、this指向创建的对象
3、执行构造函数的代码,添加方法和属性
4、返回对象

for in 遍历对象

<script>
    var obj = {
        uname: 'yyyy',
        age: 21,
        sex: 'nan',
        say: function() {
            console.log('shuohuale');
        }
    }
    for (var k in obj) {
        console.log(k); //k变量输出得到的是属性名
        console.log(obj[k]); //obj[k]得到的是属性值
    }
</script>

Math

Math不是构造函数,而是具有数学常数和函数的数学和方法,跟数学相关的运算,可以使用Math中的成员

    Math.PI; //圆周率
    Math.floor; //向下取整
    Math.ceil; //向上取整
    Math.round; //四舍五入 
    Math.abs; //绝对值
    Math.max; //最大值
    Math.min; //最小值
    Math.random //随机数
<script>
    // 随机得到两个数之间的随机整数
    function getRandom(min, max) {
        return Math.floor(Math.random() * (max - min + 1) + min);
    }
    console.log(getRandom(1, 2));
</script>

Date

<script>
    // 无参数就返回当前时间
    var date = new Date();
    console.log(date);
    var date1 = new Date(2019, 5, 1);
    // 这种返回的月份多一个月
    console.log(date1);
    var date2 = new Date('2010-05-01 0:0:0');
    console.log(date2);
</script>
<script>
    var date = new Date();
    console.log(date.getFullYear()); //返回当前年
    console.log(date.getMonth() + 1); //返回当前月
    console.log(date.getDate()); //返回的是几号
    console.log(date.getDay()); //返回周几(按招外国来)
</script>
<script>
	//封装一个显示当前时间的函数
    function getNowTime() {
        var date = new Date();
        var year = date.getFullYear();
        var month = date.getMonth() + 1;
        var dates = date.getDate();
        var arr = ['星期日', '星期一', '星期二', '星期三', '星期四', '星期五', '星期六'];
        var day = arr[date.getDay()];
        var hour = date.getHours();
        var minute = date.getMinutes();
        var second = date.getSeconds();
        console.log('今天是:' + year + '年' + month + '月' + dates + '日 ' + day + ' ' + hour + ':' + minute + ':' + second);
    }
    getNowTime();
</script>
<script>
    var date = new Date();
    //显示现在距1970/01/01的毫秒数
    console.log(date.valueOf());
    console.log(date.getTime());
    // 简单的写法
    var date1 = +new Date();
    console.log(date1);
    // H5新增的
    console.log(Date.now());
</script>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值