自从接触“第一性原理”,这个词在网上被吹得神乎其神。可是它到底是什么?我还没认真考究过。直到今天,通过浏览各位大佬的博文,对第一性原理有了点自己的理解。今天就和大家分享以下两点:
当我看到下面马斯克这段话的完整译文,才终于把握到了“第一性原理”的实质,这令人膜拜的“第一性原理”,不就是“解耦合(decoupling)”吗?
要搞清楚这个概念,我们不妨试想,我们作为开发人员,希望改进一款开源软件产品的功能,你会怎么做?
你会打开一个新的空白源代码文件,从头开始,一行行的写代码吗?
基本上不会。那你会怎么做呢?
你会读现有软件的源代码,把新的功能实现补充或更新到对应的位置,提交合并请求
在这个过程中,我们都是把前人做的东西作为基础层,而后再在这个层次上,去叠加新的内容。
如果大家还没有理解,我们不妨再思考一个问题:为什么现在数据科学这么火热?Python、R和机器学习框架为何这么受到欢迎?甚至让很多非IT人士也在乐此不疲地渴望学习、应用它们?
因为有许许多多的开发者,已经为你写好了实现数据科学工作的各项基本功能。相关的软件包已有成千上 万,而且每天还在不停快速涌现。你根本不需要了解哪些功能究竟是如何实现出来的,只要会搜软件、查文档,直接“拿来主义”调用就能实现酷炫繁复的功能,方便得令人发指。
现在,大家再试想一下:如果之前的前提都不成立了呢?假设你目前的工作做所依赖的基础层级存在问题呢?
这就比如“品牌假货”的存在,大家都痛恨假货,但是原本品牌的存在,就会减低大家识别商品质量的成本。如果一个案例中,两种事物同时出现,总会被我们脑补为必然的关联,于是就耦合在一起了。你不难感受到,耦合的结果是非常不利于创新的。而所谓的“第一性原理”,即是一种“解耦合”的思维方式
showName()//函数的执行
var showName = function(){ // 抛去后面的函数赋值看,这其实就是一个变量声明加一个变量赋值
console.log(2)
}
function showName(){ //函数的声明
console.log(1)
}
showName()//函数的执行(调用)
什么是声明提升?
变量声明提升
console.log(showName)// undefined
var showName = 'Aaron_hj'
console.log(showName)// Aaron_hj
我们不难看出,在第一个打印showName处,变量showName还未声明,但此处不会报错,而是打印值undefined。这就是变量声明提升:变量在声明前已经可用。 实际上,代码运行顺序是:
var showName; //变量声明提升
console.log(showName);// undefined
showName = 'Aaron_hj'// 赋值
console.log(showName) //Aaron_hj
注意:声明提前是在JavaScript引擎的预编译时进行,是在代码开始运行之前。并且,只有声明提升,赋值仍在原处
函数声明提升
showName()// 函数的执行(调用)
function showName(){ // 函数的声明
console.log(1)
我们不难看出,在调用showName()处,函数showName()还未声明,但该代码片仍能正常运行。这就是函数声明提升:函数声明语句可以被提升到外部脚本或者外部函数作用域的顶部。 实际上,代码运行顺序是:
function showName(){ // 函数的声明
console.log(1)}
showName()// 函数的执行(调用)
注意:虽然函数声明和变量声明都会被提升,但是函数会首先被提升,然后才是变量。
变量作用域
函数作用域
var name = 'Aaron_hj';
function showName(){
var anotherName = 'Aaron';
function swapName(){
var tmpName = anotherName;
anothorName = name
name = tmpName;
}
swapName();
}
showName();
第一步:全局上下文入栈
第二步:showName的执行上下文入栈
第三步:swapName的执行上下文入栈
第四步:swapName的执行上下文出栈
第五步:showName的执行上下文出栈
全局上下文在浏览器窗口关闭后出栈
注意:函数中,运行到return会直接终止函数可执行代码的执行,因此会直接将当前上下文弹出栈。
接上一篇: 正则表达式(regex)错误使用导致功能漏洞 ,我们继续梳理,正则表达...
文章目录 引言 I 代码混淆 II 敏感逻辑的保护方案 III 接口安全(网络加密传输) 3...
测试框架版本是 Laravel 6.5, Eloquent 修改器使用可以参阅 - 查看文档 修改器的...
一、 问题描述 access_ok函数是什么原理? 问题 二、问题分析 我们在内核空间和用...
本文转载自微信公众号「Linux开发那些事儿 」,作者LinuxThings。转载本文请联系...
平台简介? ?? ? ? ? Z平台是开源免费的JAVA快速开发平台并且承诺永久开源免费。...
关于window下自带name的属性 不知道大家有没有发现这样一种情况 在控制台里直接...
对用户获取短信验证码的手机号、ip、和浏览器(使用唯一标识)进行限制。本文介...
JDBC安装以及使用详解 JDBC概念 JDBC下载安装 下载JDBC 安装JDBC 详细步骤 常用...
一句话概括:数据劫持(Object.defineProperty)+发布订阅模式 双向数据绑定有三...